реклама на сайте
подробности

 
 
> Двумерный массив строк в C
Freeze Anti
сообщение Feb 10 2009, 11:29
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613



Здравствуйте.

Суть моего вопроса такова. Мне необходимо создать двумерный массив, состоящий из строк. Потом мне нужно в отдельной функции по необходимости добавлять туда значения. Делаю это так.

Код
static char *MyArray[255][8];

void MyFunc()
{
     char *buffer;
     buffer = calloc(1, 51);
     int x, y;
     /*Здесь есть некоторый код, в котором происходит присваивание переменным x, y, buffer*/
     MyArray[x][y] = buffer;
     free(buffer);
}


Так вот. После того, как я очищаю буфер, значение MyArray[x][y] превращается в мусор. Как бы мне сохранить значение переменной MyArray при выходе из функции?

Сообщение отредактировал Freeze Anti - Feb 10 2009, 11:35


--------------------
!!! All you need is LOVE !!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SSerge
сообщение Feb 11 2009, 09:27
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



"двухмерный аррей пойнтеров на стринги" читать как "двухмерный массив указателей на строки".
А в остальном согласен с мнением A. Fig Lee.

Значение MyArray[x][y] вовсе не превращается в мусор, там находится указатель на память, выделенную вызовом calloc(1, 51).
А вот после free(buffer) эта память освобождается и при последующих вызовах calloc() может быть выделена уже под другую строку. Просто не нужно освобождать память под строку, до тех пор пока она нужна. А как перестала быть нужной - можно и освободить:
free( MyArray[x][y] );
MyArray[x][y] = NULL;


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 16:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016