2015-02-11 4 views
1

Я занимаюсь разработкой Blackberry 10 приложений. У меня есть некоторые проблемы с использованием GroupDataModel.bb10 cascades clear GroupDataModel crash

это код:

  GroupDataModel *searchModel; 

      if (searchModel != NULL){ 
       qDebug() << "Masuk sini"; 
       searchModel->clear(); 
      } 
      searchModel = new GroupDataModel(
        new QListDataModel<QString>(
          QList<QString>() << "suburbName")); 
      QVariantMap map; 
      for (int i = 0; i < list.size(); ++i) { 
       QVariantMap x = list.at(i).toMap(); 
       map["suburbName"] = x.value("address").toString(); 
       qDebug() << x; 
       qDebug() << map; 
       searchModel->insert(map); 
      } 

      searchList->resetDataModel(); 
      searchModel->setGrouping(ItemGrouping::None); 

      searchList->setDataModel(searchModel); 

этот код называется не только один раз. поэтому, когда он называется, мне нужно очистить GroupDataModel. , но это всегда сбой. и когда я отлаживаю, проблема заключается в том, что searchModel-> clear(); Я уже пробовал заменять это с помощью free (searchModel), но авария все еще происходит.

аварии говорит: Сегментация Fault

кто-то пожалуйста, помогите мне! Я борюсь с этой проблемой в течение нескольких дней.

Благодаря

С уважением, Йога

ответ

1

Вы делаете это в неправильном направлении. Если вы хотите повторно использовать объект searchModel в своем классе, сделайте его переменной-членом, а затем выполните только свою задачу.

0

Нужно инициализировать указатель GroupDataModel с помощью NULL. В противном случае указателю присваивается некоторое случайное значение, которое все еще находится в памяти. Если вы получаете доступ к неинициализированному указателю, вы получаете ошибку сегментации.

GroupDataModel *searchModel = 0; 
0

Код неисправен, поскольку вы разыскиваете неинициализированный указатель. searchModel не был инициализирован ничем, когда вызывается searchModel->clear().

Если ваш код вызываются несколько раз, неплохо было бы объявить searchModel как переменные:

GroupDataModel *searchModel; 

Затем вам нужно инициализировать его, например, в конструкторе объемлющего класса, но не в функция, которая называется много, поскольку вам нужен только один экземпляр GroupDataModel.

searchModel = new GroupDataModel(QStringList() << "suburbName"); 

Тогда остальная часть вашего кода должна работать.

 Смежные вопросы

  • Нет связанных вопросов^_^