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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Saiberg
19 / 19 / 1
Регистрация: 23.09.2010
Сообщений: 193
#1

Работа с Heap - C++

21.11.2010, 23:43. Просмотров 1159. Ответов 1
Метки нет (Все метки)

Помогите найти ошибку а то я что-то уже зае****

Так работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
    if(!data){//первый вызов функции
        if(data=(uchar*)my::malloc(newDataSize)){
            my::memcpy(data,newData,newDataSize);
            dataSize=newDataSize,totalAllocSize=newDataSize;
        }
    }
    else{
        if(data=(uchar*)my::realloc(data,newDataSize+dataSize)){
            my::memcpy(data+dataSize,newData,newDataSize);
            dataSize+=newDataSize;
        }
    }
Так нет (else блок меняем)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//else{
    //  if(newDataSize<totalAllocSize-dataSize){//если хватает выделенной до этого памяти
    //      my::memcpy(data+dataSize,newData,newDataSize);
    //      dataSize+=newDataSize;
    //  }
    //  else{//переаллокация
    //      uint allocSize=totalAllocSize/2;
    //      if(allocSize<newDataSize) allocSize=newDataSize;//если не хватает половины памяти выделенной до этого
    //      if(data=(uchar*)my::realloc(data,allocSize+dataSize)){
    //          my::memcpy(data+dataSize,newData,newDataSize);
    //          dataSize+=newDataSize;
    //          totalAllocSize+=allocSize;
    //      }
    //  }
    //}
если во втором варианте убрать
my::memcpy(data+dataSize,newData,newDataSize);
отсюда
C++
1
2
3
if(newDataSize<totalAllocSize-dataSize){//если хватает выделенной до этого памяти
    //      my::memcpy(data+dataSize,newData,newDataSize);
    //      dataSize+=newDataSize;
то программа хотя бы не падает. Видимо пишу за границы выделенной памяти но не понимаю где ошибаюсь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2010, 23:43     Работа с Heap
Посмотрите здесь:

Heap in C++ - C++
Как подключить кучу в C++?

Heap in C++ - C++
Можно ли сделать кучу (make_heap) не максимальную, а минимальную?

heap corruption detected - C++
имеется класс CStr - строка, в нём есть конструктор CStr CStr::CStr(char *s) { length = 0; while (s) length++; str = new...

Heap corruption detected - C++
При попытке очистить память выдает &quot;Heap corruption detected&quot;. Помогите пожалуйста( // labanext.cpp : Defines the entry point for the...

Malloc - heap corruption - C++
студия ошибку выдает на double *F=(float*)malloc((N)*sizeof(float)); эта часть кода у меня не хочет работать : ...

Heap corruption detected - C++
Heap corruption на строке 93 при первом же выполнении цикла. Из-за чего? #include &lt;locale.h&gt; // для возможности вывода кириллицы ...

Heap Corruption Detected - C++
Выдает ошибку HEAP CORRUPTION DETECTED, судя по всему где то ошиблась с распределением памяти Предполагаю, что ошибка прячется в районе...

Heap corruption detected - C++
Возникает эта ошибка при выполнении функции Strings::Append (строка 81, в меню это пункт 3). Входные данные на всякий случай прикрепила....

HEAP CORRUPTION DETECTED - C++
Собственно такую ошибку выдаёт: &quot;HEAP CORRUPTION DETECTED: after Normal block (#220) at 0x001970B8. CRT detected that the application...

Heap Corruption detected ( - C++
что не правильно? запускаю и ошибка вылетает как на предидущей картинке template&lt;typename TT&gt; class Matrix { public:...

Ошибка HEAP CORRUPTION - C++
Добрый вечер, программисты) Не могли бы вы подсказать новичку, каким образом можно обнаружить ошибку (heap corruption). Трассировка...

Heap corruption detected - C++
Ошибка возникает после отработки программы Заголовочный файл: #pragma once #include&lt;iostream&gt; #include&lt;valarray&gt; ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.11.2010, 03:56     Работа с Heap #2
попробуй
C++
1
realloc(data, dataSize + newDataSize)
если realloc не сможет выделить память, что будет ? если программа продолжит работать, то указатель в data будет потерян, так как производится присваивание
Yandex
Объявления
22.11.2010, 03:56     Работа с Heap
Ответ Создать тему
Опции темы

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