Функция работает с значительными массивами памяти, которые перевыделяються 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. Для ускорения процеса
>перевыделение
>происходит "квантами" по 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;
>}
> for (i=0;i=10000;i++)А вот это "i = 10000" - это анекдот. Так глупо, что сначала и не заметил ;)
Спасибо. Выделение памяти заработало. :))))> for (i=0;i=10000;i++)
это просто описка, прошу прощения.Если не сложно еще один мини вопрос. Если выделение памяти
не под конкретный тип, а под структуру то вместо
...(int*)realloc... в строке selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int));
надо писать
...(структура*)realloc...
Спасибо.
>Если не сложно еще один мини вопрос. Если выделение памяти
>не под конкретный тип, а под структуру то вместо
>...(int*)realloc... в строке
>
>selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int));
>надо писать
>...(структура*)realloc...Никакого значения "под что" выделяется память нет, важен лишь размер выделенного куска. Писать aaa = (bbb *)malloc(sizeof(bbb)); правильнее, если aaa объявлена как bbb *aaa;