Как выделить память для указателя на массив char *? - PullRequest
1 голос
/ 20 января 2012

Может кто-нибудь объяснить, как правильно выделить память для указателя на массив указателей символов в c?Например:

char *(*t)[];

Я пытаюсь сделать это так:

*t = malloc( 5 * sizeof(char*));

Это дает мне ошибку компиляции:

error: invalid use of array with unspecified bounds

Любая помощь по этомубудь великолепен!Спасибо

Ответы [ 4 ]

4 голосов
/ 20 января 2012

Что вы можете сделать, это:

char **t = (char**)malloc( <no of elements> * sizeof(char*));

Это выделяет массив указателей.

for (i = 0 ; i< <no of elements> ; i++)
{
    t[i] = (char*)malloc( <length of text> * sizeof(char));
}

Это выделяет память для текста, на который указывает каждый элемент массива.

2 голосов
/ 20 января 2012

Когда люди говорят «указатель на массив X», обычно они действительно имеют в виду указатель на первый элемент массива X. Типы указатель на массив очень неудобны для использования вC, и обычно используются только при использовании многомерного массива.

С учетом вышесказанного, тип, который вам нужен, это просто char **:

char **t = malloc(num_elems * sizeof *t);

Использование указателя на массивтип, это будет выглядеть следующим образом:

char *(*t)[num_elems] = malloc(sizeof *t);

Обратите внимание, что это будет тип массива переменной длины C99, если num_elems не является целочисленным константным выражением в формальном смысле этого термина.

0 голосов
/ 20 января 2012

Попробуйте это:

int main()
{
    char** a = new char* [100];
    delete []a;
    return 0;
}
0 голосов
/ 20 января 2012

Ну, это зависит от того, как вы хотите, чтобы он был распределен, но здесь есть один способ.

char** myPointer = malloc(sizeof(char *) * number_Of_char_pointers)
int i;
for(i = 0; i <  number_Of_char_pointers; i++)
{
     myPointer[i] = malloc(sizeof(char) * number_of_chars);
}

что следует отметить, что myPointer [i] почти точно совпадает с высказыванием * (myPointer + i)когда используется для разыменования переменной, а не во время инициализации.

...