Как мне инициализировать этот массив указателей? - PullRequest
0 голосов
/ 16 марта 2012

Я действительно не уверен, что это такое (если это массив указателей или массив массивов указателей ???), но когда я наступаю на него через отладчик, он дает мне 0xCDCDCDCD, что означает, что память выделена , но неинициализированный. Может кто-нибудь показать мне, как его инициализировать?

Спасибо.

char* (*vars)[4];

Я пробовал что-то подобное, но выдает ошибки компиляции:

for (int i = 0; i < 4; i++)
    vars[i] = new char*[new char*][4]; // error C2440: 'initializing' : cannot convert from 'char **' to 'unsigned int'

Ответы [ 3 ]

7 голосов
/ 16 марта 2012

Во-первых, вам нужно использовать cdecl :

объявляет переменные как указатель на массив 4 указателя на символ

То, как вы его инициализируете, зависит от вашей цели. Но, например:

// Create a new array
vars = new (char *[1][4]);
// Each element of the array in turn points to an array
for (int i = 0; i < 4; i++) {
    (*vars)[i] = new char[27];
}

...

// Cleanup
for (int i = 0; i < 4; i++) {
    delete [] (*vars)[i];
}
delete [] vars;

Наконец, вы никогда не должны писать такой код на C ++. Всегда есть лучший способ сделать то, что вы пытаетесь сделать (обычно с использованием контейнеров и умных указателей).

2 голосов
/ 16 марта 2012

vars - указатель на массив из 4 указателей на символ.

Вы не можете вложить индекс new в C ++, поэтому вы должны сделать что-то вроде:

vars = new (char*)[4];
for(int i=0; i<4; i++) {
     (*vars)[i] = ...;
}

Внутренняя часть цикла, инициализация указателей в этом массиве, сильно зависит от остальной части вашей программы.

А если серьезно, если вы начнете писать что-то подобное, какое бы лекарство вы ни использовалина, бери больше или меньше.

0 голосов
/ 16 марта 2012

double (vars)[4]; просто объявляет массив из 4 двойных.(Дополнительные скобки просто сбивают с толку).Если вам нужен массив из 4 строк, используйте char *((vars)[4]); (ОК, я поставил скобки за борт.) Затем вы можете инициализировать их как нулевые, или выделить новые строки, или указать их в предварительно выделенной памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...