Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
yoloyol
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 15
#1

Не выполняется realloc - C++

03.06.2012, 13:35. Просмотров 1440. Ответов 20
Метки нет (Все метки)

Вообщем, не могу понять в чем ошибка, malloc() работает, а realloc() выдает ошибки. Имеется собственный тип item (структура, в которой два поля, типа char и int), вот тот самый realloc():
C++
1
2
3
4
5
...
   cout<<"перед realloc"<<endl;
   vector=(item *) realloc(vector, size*sizeof(item)); 
   cout<<"realloc выполнен"<<endl;
...
*первое сообщение выводится, а то, что после realloc'а - нет.

vector - указатель типа item
size - кол-во элементов, для которых требуется место

P.S. IDE - code::blocks
OC Linux (Ubuntu)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 13:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не выполняется realloc (C++):

Код не выполняется в одном месте, но выполняется в другом - C++
Вот код процедуры: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; ...

realloc - C++
здраствуйте! решил накатать такой класс #include &lt;stdlib.h&gt; template &lt;typename TYPE&gt; class List { private: TYPE*...

realloc - C++
#include &lt;iostream&gt; using namespace std; int main() { int size=0; cout&lt;&lt;&quot;enter size array: &quot;; cin&gt;&gt;size; int...

realloc - C++
Доброго времени суток, есть код, в котором динамически выделяется память под массив, затем этот массив инициализируется с клавиатуры и...

realloc - C++
Столкнулся с проблемой при значениях nStgElm близких к 1000 происходит ошибка выеления памяти WIN32_FIND_DATA * pDATA = (WIN32_FIND_DATA...

malloc/realloc - C++
есть следующий код: mmlist=(_mathmod*)malloc(sizeof(_mathmod)); *mmlist=_mathmod(mm); int i=0; ...

20
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
03.06.2012, 15:32 #16
Если Вы про выход за пределы массива, то это лишь часть проблемы. Потому что после ее исправления, память у меня так же съедалась, размер не изменился. При каких то 12 символах жрет 40 МБ памяти. Советую Вам пересмотреть реализацию перераспределения памяти и проверку на указание последнего элемента.
0
yoloyol
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 15
03.06.2012, 15:42  [ТС] #17
Цитата Сообщение от Toshkarik Посмотреть сообщение
Если Вы про выход за пределы массива, то это лишь часть проблемы. Потому что после ее исправления, память у меня так же съедалась, размер не изменился. При каких то 12 символах жрет 40 МБ памяти. Советую Вам пересмотреть реализацию перераспределения памяти и проверку на указание последнего элемента.
разве 40 мб?!
ну вот допустим, я вызвал: vector=(item *) realloc(vector, size*sizeof(item));
до этого size был равен 10, sizeof(item) равен 8, итого: 80 байт.
после перераспределения: 15 * 8 = 120 байт, *(+еще предыдущие 80 байт), итого: 200 байт, а не 40 мбайт
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
03.06.2012, 15:45 #18
У меня, при наличии в файле 12 символов, размер в конце равен, как я и писал выше, 5 314 410.
0
yoloyol
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 15
03.06.2012, 15:48  [ТС] #19
Цитата Сообщение от Toshkarik Посмотреть сообщение
У меня, при наличии в файле 12 символов, размер в конце равен, как я и писал выше, 5 314 410.
а у меня вроде не так. А могли бы вы показать, как вы проверяете размер занятой памяти?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
03.06.2012, 16:05 #20
Вывод консоли
size_malloc= 80
индексирование выполнено
dataList.head= 0
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 240
size= 30
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 720
size= 90
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 2160
size= 270
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 6480
size= 810
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x876d60
size_realloc= 19440
size= 2430
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x8786c0
size_realloc= 58320
size= 7290
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x2f7fd0
size_realloc= 174960
size= 21870
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x3063b0
size_realloc= 524880
size= 65610
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x330f30
size_realloc= 1574640
size= 196830
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x6e0040
size_realloc= 4723920
size= 590490
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x880040
size_realloc= 14171760
size= 1771470
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0xd10040
size_realloc= 42515280
size= 5314410
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2

Просто перед return 0; в main вставьте какую нибудь функцию для паузы программы. И после того как данные считаются, посмотрите сколько она занимает памяти в диспетчере задач.
0
yoloyol
0 / 0 / 0
Регистрация: 17.05.2012
Сообщений: 15
03.06.2012, 16:08  [ТС] #21
Цитата Сообщение от Toshkarik Посмотреть сообщение
Вывод консоли
size_malloc= 80
индексирование выполнено
dataList.head= 0
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 240
size= 30
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 720
size= 90
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 2160
size= 270
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x8764e0
size_realloc= 6480
size= 810
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x876d60
size_realloc= 19440
size= 2430
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x8786c0
size_realloc= 58320
size= 7290
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x2f7fd0
size_realloc= 174960
size= 21870
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0x3063b0
size_realloc= 524880
size= 65610
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2
***переход***
переход в else
перед realloc
vector= 0x330f30
size_realloc= 1574640
size= 196830
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x6e0040
size_realloc= 4723920
size= 590490
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 3
***переход***
переход в else
перед realloc
vector= 0x880040
size_realloc= 14171760
size= 1771470
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 1
***переход***
переход в else
перед realloc
vector= 0xd10040
size_realloc= 42515280
size= 5314410
realloc выполнен
индексирование выполнено
перераспределение выполнено
***переход***
vector[dataList.curr].element= 2

Просто перед return 0; в main вставьте какую нибудь функцию для паузы программы. И после того как данные считаются, посмотрите сколько она занимает памяти в диспетчере задач.
ахах)) на самом деле всё в порядке, тот код который я выложил, я его уже модифицировал и такого, теперь нет))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2012, 16:08
Привет! Вот еще темы с ответами:

Malloc realloc и C++ - C++
Подскажите, в C++ 11 выделение памяти по прежнему &quot;нормально&quot; выделять с помощью malloc и изменять размер realloc ? Или это уже прошлое?...

Функция realloc - C++
Начнем сразу с кода. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;cstdlib&gt; int main(void) { using namespace std; ...

аналог realloc() в С++ - C++
Здравствуйте. собственно вопрос:-существует ли таковой?

Альтернатива realloc ? - C++
Ищу способ динамически расширять массив объектов. В с++ использую new и delete, а перемешивать с ними сишные способы выделения памяти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Yandex
Объявления
03.06.2012, 16:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru