Распределение памяти в С

Обсуждение различной литературы о Linux

Модератор: Модераторы разделов

Аватара пользователя
krivakin
Сообщения: 117
ОС: Debian 4.0

Распределение памяти в С

Сообщение krivakin »

Подскажите книгу или статью в которой подробно описывается работас памятью на "C".
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Распределение памяти в С

Сообщение KiWi »

Код: Выделить всё

man 3 malloc alloca

на статью потянут?

а также уже более специфичные функции в

Код: Выделить всё

man 3 memset memcpy memmove memccpy memcpy

а также их wide-character аналоги

P.S.: а также там есть ещё See also
Спасибо сказали:
Аватара пользователя
krivakin
Сообщения: 117
ОС: Debian 4.0

Re: Распределение памяти в С

Сообщение krivakin »

IFL писал(а):
09.04.2006 19:14

Код: Выделить всё

man 3 malloc alloca

на статью потянут?

а также уже более специфичные функции в

Код: Выделить всё

man 3 memset memcpy memmove memccpy memcpy

а также их wide-character аналоги

P.S.: а также там есть ещё See also


man'ы я уже изучил. Желательно поподробнее и с примерами.
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Распределение памяти в С

Сообщение KiWi »

krivakin писал(а):
09.04.2006 19:51
man'ы я уже изучил. Желательно поподробнее и с примерами.

Поподробнее в чём?
Чем вам недостаточно выделения/очищение/изменение размера выделенной памяти?
ЧТО ЕЩЁ ТАМ МОЖЕТ БЫТЬ?

Примеры -- там, вообщем, всё предельно чётко написано... К тому же всё предельно просто ищется в google(запрос по строке(ты наверно не поверишь!): <имя функции> example)...
И сам экспериментируй, самые лучшие уроки -- собственные ошибки...

P.S.: а также надо не забывать, что если мы хотим выделить 10 wchar'ов, то и выделять надо 10 wchar'ов...

Код: Выделить всё

wchar_t *string = (wchar_t*)malloc(10*sizeof(wchar_t));

А не 10байт.
Спасибо сказали:
Аватара пользователя
krivakin
Сообщения: 117
ОС: Debian 4.0

Re: Распределение памяти в С

Сообщение krivakin »

Поподробнее в чём?
Чем вам недостаточно выделения/очищение/изменение размера выделенной памяти?
ЧТО ЕЩЁ ТАМ МОЖЕТ БЫТЬ?


Может быть я не правильно выразился. Опишу конкретную проблему.
Есть программа:

Код: Выделить всё

main()
{
int i;
char **ch;
ch = (char**)malloc(10*sizeof(char));
for (i=0; i!=10; i++) ch[i] = (char*)malloc(10*sizeof(char));
realloc (ch,20*sizeof(char));
for (i=10; i!=20; i++) ch[i] = (char*)malloc(10*sizeof(char));
ch[13][4]='b';
printf("%c\n",ch[13][4]);
}

объясните пожалуйста посему она выдает "Segmentation fault"?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Распределение памяти в С

Сообщение KiWi »

krivakin писал(а):
14.04.2006 19:47
Поподробнее в чём?
Чем вам недостаточно выделения/очищение/изменение размера выделенной памяти?
ЧТО ЕЩЁ ТАМ МОЖЕТ БЫТЬ?


Может быть я не правильно выразился. Опишу конкретную проблему.
Есть программа:

Код: Выделить всё

main()
{
int i;
char **ch;
ch = (char**)malloc(10*sizeof(char));
for (i=0; i!=10; i++) ch[i] = (char*)malloc(10*sizeof(char));
realloc (ch,20*sizeof(char));
for (i=10; i!=20; i++) ch[i] = (char*)malloc(10*sizeof(char));
ch[13][4]='b';
printf("%c\n",ch[13][4]);
}

объясните пожалуйста посему она выдает "Segmentation fault"?

Объясняю.
Вы выделяете память для char** неправильно -- у вас каждый элемент char** -- char*, а не char.
А также -- realloc возвращает указать на новый кусок памяти, тогда как вы это игнорируете и сохраняете старый.

P.S.: я об этом уже писал, кстати -- см. p.s. в Распределение памяти в С
Спасибо сказали: