Распределение памяти в С
Модератор: Модераторы разделов
-
- Сообщения: 117
- ОС: Debian 4.0
Распределение памяти в С
Подскажите книгу или статью в которой подробно описывается работас памятью на "C".
-
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Распределение памяти в С
Код: Выделить всё
man 3 malloc alloca
на статью потянут?
а также уже более специфичные функции в
Код: Выделить всё
man 3 memset memcpy memmove memccpy memcpy
а также их wide-character аналоги
P.S.: а также там есть ещё See also
-
- Сообщения: 117
- ОС: Debian 4.0
Re: Распределение памяти в С
IFL писал(а): ↑09.04.2006 19:14Код: Выделить всё
man 3 malloc alloca
на статью потянут?
а также уже более специфичные функции в
Код: Выделить всё
man 3 memset memcpy memmove memccpy memcpy
а также их wide-character аналоги
P.S.: а также там есть ещё See also
man'ы я уже изучил. Желательно поподробнее и с примерами.
-
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Распределение памяти в С
Поподробнее в чём?
Чем вам недостаточно выделения/очищение/изменение размера выделенной памяти?
ЧТО ЕЩЁ ТАМ МОЖЕТ БЫТЬ?
Примеры -- там, вообщем, всё предельно чётко написано... К тому же всё предельно просто ищется в google(запрос по строке(ты наверно не поверишь!): <имя функции> example)...
И сам экспериментируй, самые лучшие уроки -- собственные ошибки...
P.S.: а также надо не забывать, что если мы хотим выделить 10 wchar'ов, то и выделять надо 10 wchar'ов...
Код: Выделить всё
wchar_t *string = (wchar_t*)malloc(10*sizeof(wchar_t));
А не 10байт.
-
- Сообщения: 117
- ОС: Debian 4.0
Re: Распределение памяти в С
Поподробнее в чём?
Чем вам недостаточно выделения/очищение/изменение размера выделенной памяти?
ЧТО ЕЩЁ ТАМ МОЖЕТ БЫТЬ?
Может быть я не правильно выразился. Опишу конкретную проблему.
Есть программа:
Код: Выделить всё
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"?
-
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: Распределение памяти в С
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. в Распределение памяти в С