Растущая последняя строка массива реализована в массиве указателей на массивы? - PullRequest
0 голосов
/ 09 июля 2019

У меня есть динамически распределяемая двумерная структура данных с емкостью 25 строк, каждая длиной до 50. Как я могу вырастить последнюю строку t, массив указателей на массивы, чтобы в нем было место для строка длиной 200 вместо 50? Я хочу, чтобы он также сохранил содержимое строки.

Вот как я динамически выделил t, структуру двумерного массива:

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

for (int i = 0; i < 25; i++)
  t[i] = (char *)malloc(50 * sizeof(char));

Могу ли я получить доступ к последней строке с помощью t[24]? Как мне на самом деле изменить длину строки до 200 вместо 50?

Пока что я пробовал t[24] = (char *)malloc(200 * sizeof(char));, но я не уверен, что это правильно.

1 Ответ

1 голос
/ 09 июля 2019

Используйте realloc(), чтобы изменить размер существующего выделения. Если вы используете malloc(), как вы это делали, вы теряете исходное содержимое массива, а также теряете указатель на него, так что вы не можете освободить память.

char *temp = realloc(t[24], 200 * sizeof(char));
if (temp) {
    t[24] = temp;
}
...