Проблема с realloc, Alexander, 22-Апр-03, 16:44 [смотреть все]Функция работает с значительными массивами памяти, которые перевыделяються realloc. Для ускорения процеса перевыделение происходит "квантами" по 1000 закладок структуры. Проблема в том, что в разных участках программы та самая конструкция или нормально работает или работает только несколько раз с Segmentation fault. вот пример:#include <stdio.h> #include <stdlib.h> #define QUANT 1000 struct{long int size; long int memory; int *data; }selection; int main(int argc, char *argv[]) { long int i; selection.size=0; selection.memory=QUANT; selection.data=malloc(selection.memory*sizeof(selection.data)); for (i=0;i=10000;i++) { if (selection.size==selection.memory) { selection.memory=selection.memory+QUANT; realloc(selection.data,selection.memory*sizeof(selection.data)); } selection.data[selection.size]=45576; selection.size++; } return 1; } |
- Проблема с realloc, pth, 17:39 , 22-Апр-03 (1)
>Функция работает с значительными массивами памяти, которые перевыделяються realloc. Для ускорения процеса >перевыделение >происходит "квантами" по 1000 закладок структуры. Проблема в том, >что в разных участках программы та самая конструкция или нормально >работает или работает только несколько раз с Segmentation fault. >вот пример: > >#include <stdio.h> >#include <stdlib.h> > >#define QUANT 1000 > >struct{long int size; > long int >memory; > int *data; > > }selection; > >int main(int argc, char *argv[]) >{ >long int i; > >selection.size=0; >selection.memory=QUANT; >selection.data=malloc(selection.memory*sizeof(selection.data));/* Что по вашему мнению делает "sizeof(selection.data)"? */ selection.data = (int*)malloc(selection.memory * sizeof(int)); if(!selection.data) { /* Ошибочка */ } >for (i=0;i=10000;i++) > { > if (selection.size==selection.memory) > { > selection.memory=selection.memory+QUANT; > realloc(selection.data,selection.memory*sizeof(selection.data)); selection.data = (int*)realloc(selection.data, selection.memory * sizeof(int)); if(!selection.data) { /* Ошибочка вышла */ } > } > selection.data[selection.size]=45576; > selection.size++; > } > return 1; >}
- Проблема с realloc, pth, 17:58 , 22-Апр-03 (2)
> for (i=0;i=10000;i++) А вот это "i = 10000" - это анекдот. Так глупо, что сначала и не заметил ;) - Проблема с realloc, Alexander, 18:21 , 22-Апр-03 (3)
Спасибо. Выделение памяти заработало. :))))> for (i=0;i=10000;i++) это просто описка, прошу прощения. Если не сложно еще один мини вопрос. Если выделение памяти не под конкретный тип, а под структуру то вместо ...(int*)realloc... в строке selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int)); надо писать ...(структура*)realloc... Спасибо.
- Проблема с realloc, pth, 18:58 , 22-Апр-03 (4)
>Если не сложно еще один мини вопрос. Если выделение памяти >не под конкретный тип, а под структуру то вместо >...(int*)realloc... в строке > >selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int)); >надо писать >...(структура*)realloc... Никакого значения "под что" выделяется память нет, важен лишь размер выделенного куска. Писать aaa = (bbb *)malloc(sizeof(bbb)); правильнее, если aaa объявлена как bbb *aaa;
|