The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"char **str = malloc.... пытаюсь научиться использовать динам..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от myxa on 19-Ноя-09, 13:23 

   int i;
   char **str = (char**) malloc (10 * sizeof(char*));

   for( i = 0; i < 10; i++ )
      {
        str[i] = (char*) malloc (256 * sizeof(char));
        strcpy(str[i],"myxa");
      }

  for( i = 0; i < 10; i++ )
      {
       free(str[i]);
      }
  free(str);

кусок выше работает
если сделать присвоение то на этапе запуска прога улетает в дамп
str[i]="myxa";

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от phpcoder email(??) on 19-Ноя-09, 13:32 
>кусок выше работает
>если сделать присвоение то на этапе запуска прога улетает в дамп
>str[i]="myxa";

Потому что при присвоении строки вы присваиваете не строку, а адрес на эту строку. Причем, эта строка константная и находится в специальном сегменте памяти, доступном только для чтения. Вызывать для этого указателя free() это ошибка, которая и приводит к аварийному завершению программы.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от myxa on 19-Ноя-09, 13:34 
>>кусок выше работает
>>если сделать присвоение то на этапе запуска прога улетает в дамп
>>str[i]="myxa";
>
>Потому что при присвоении строки вы присваиваете не строку, а адрес на
>эту строку. Причем, эта строка константная и находится в специальном сегменте
>памяти, доступном только для чтения. Вызывать для этого указателя free() это
>ошибка, которая и приводит к аварийному завершению программы.

Спасибо!!!!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от Аноним (??) on 19-Ноя-09, 13:39 
А не проще stl?

std::vector<std::string> strv;
strv.resize(10);
for (int i=0; i<10; i++)
strv[i] = "myxa";

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от phpcoder email(??) on 19-Ноя-09, 13:44 
>А не проще stl?

К сожалению, автор не указал на чем он пишет -- С или С++ (и можно ли ему использовать STL).


P.S. кстати это

>        str[i] = (char*) malloc (256 * sizeof(char));
>        strcpy(str[i],"myxa");

можно заменить на

>        str[i] = strdup("myxa");

Ну и результат malloc() (или strdup()) неплохо бы проверять также.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "char **str = malloc.... пытаюсь научиться использовать динам..."  +/
Сообщение от myxa on 19-Ноя-09, 13:45 
>А не проще stl?
>
>std::vector<std::string> strv;
>strv.resize(10);
>for (int i=0; i<10; i++)
> strv[i] = "myxa";

Проще ... спору нет... но не панимая основ далеко не уедешь

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру