The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Проблема с realloc"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Проблема с realloc"
Сообщение от Alexander emailИскать по авторуВ закладки on 22-Апр-03, 16:44  (MSK)
Функция работает с значительными массивами памяти, которые перевыделяються 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;
}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

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

1. "Проблема с realloc"
Сообщение от pth Искать по авторуВ закладки on 22-Апр-03, 17:39  (MSK)
>Функция работает с значительными массивами памяти, которые перевыделяються 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;
>}

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Проблема с realloc"
Сообщение от pth Искать по авторуВ закладки on 22-Апр-03, 17:58  (MSK)
> for (i=0;i=10000;i++)

А вот это  "i = 10000"  - это анекдот. Так глупо, что сначала и не заметил ;)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Проблема с realloc"
Сообщение от Alexander emailИскать по авторуВ закладки on 22-Апр-03, 18:21  (MSK)
Спасибо. Выделение памяти заработало. :))))

> for (i=0;i=10000;i++)
это просто описка, прошу прощения.

Если не сложно еще один мини вопрос. Если выделение памяти
не под конкретный тип, а под структуру то вместо
...(int*)realloc... в строке                     selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int));
надо писать
...(структура*)realloc...
Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Проблема с realloc"
Сообщение от pth Искать по авторуВ закладки on 22-Апр-03, 18:58  (MSK)
>Если не сложно еще один мини вопрос. Если выделение памяти
>не под конкретный тип, а под структуру то вместо
>...(int*)realloc... в строке          
>          
>selection.data=(int*)realloc(selection.data,selection.memory*sizeof(int));
>надо писать
>...(структура*)realloc...

Никакого значения "под что" выделяется память нет, важен лишь размер выделенного куска. Писать aaa = (bbb *)malloc(sizeof(bbb)); правильнее, если aaa объявлена как  bbb *aaa;

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




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

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