Возможен ли доступ к массиву двойных указателей в массиве указателей? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь выполнить оператор, в котором произошла ошибка, в приведенном ниже коде.

Я получаю ошибку сегментации при каждом выполнении этого оператора.

Есть ли что-то неправильно с этим утверждением?

Предположим,

struct StructX
{
  int ** dblPtrArray;
}

int main()
{
  StructX * obj;
  int i = 0;
  int j = 0;

  obj[i].dblPtrArray[i][j] = 0;  // error here

return 0;
}

1 Ответ

3 голосов
/ 16 апреля 2020

Это не имеет ничего общего с двойным указателем. В основном у вас возникает следующая ситуация:

int* p;
*p = 24;

Вы обращаетесь (разыменовываете) неинициализированный указатель, который является неопределенным поведением.

В вашем конкретном случае obj неинициализирован и obj[i] является неопределенным поведением.


Ааа, и здесь мы снова go: в C ++ не используйте необработанные указатели, которые обозначают владение. Используйте умные указатели или в вашем случае контейнеры. В C ++ не используйте явные вызовы new и delete. Снова используйте умные указатели, если вам действительно нужны указатели с владельцем.

Фундаментальная концепция в C ++ - RAII

...