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

 
 
> Двумерный массив строк в 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
Ответов
777777
сообщение Feb 13 2009, 06:49
Сообщение #2


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

Группа: Участник
Сообщений: 1 091
Регистрация: 25-07-07
Из: Саратов
Пользователь №: 29 357



XVR не прав - неправильных ответов здесь гораздо больше.

Цитата(Freeze Anti @ Feb 10 2009, 14:29) *
Суть моего вопроса такова. Мне необходимо создать двумерный массив, состоящий из строк. Потом мне нужно в отдельной функции по необходимости добавлять туда значения. Делаю это так.

MyArray - это не массив строк, а массив указателей, он может указывать на любую строку, но сам он ее не содержит. Строкой MyArray[x][y] = buffer; ты указываешь на buffer, но следом этот буфер удаляешь. Поэтому указатель в MyArray после этого указывает в пустоту.
Потом, тебе не мешало бы понять что такое строка в Си, тогда тебе станет ясно, что массивов строк, а тем более двумерных, вообще говоря не бывает. Строка это одномерный массив char-ов заполненный символами и оканчивающийся нулем. Поскольку строки могут быть разной длины, то массив из них не создашь. Поэтому обычно имеют дело с указателями на строки - создается переменная типа char* или массив как у тебя MyArray и отдельно создаются строки, выделяя для каджой из них память нужной длины. После этого нужному элементу массива присваивается значение адреса выделенной строки и с ней работают. Удалять же ее нужно только по окончании работы, а не как у тебя.


Цитата(777777 @ Feb 13 2009, 09:43) *
XVR не прав - неправильных ответов здесь гораздо больше.

Кстати, это одна из причин почему надо ликвидировать раздел "Для начинающих" - его посещают только начинающие, поэтому дать правильный ответ некому.

Цитата(XVR @ Feb 11 2009, 10:50) *
Совет - задать этот вопрос в програмистком форуме (на vingrad например).

Фигасе форум. Программисты не смогли даже для себя нормальный форум создать, о чем там с ними можно говорить?
А про rsdn.ru вы когда-нибудь слышали?
Причина редактирования: Уменьшение размера цитаты.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 18:11
Рейтинг@Mail.ru


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