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

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

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

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

21.11.2010, 23:43. Просмотров 1122. Ответов 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 corruption detected C++
HEAP CORRUPTION DETECTED C++
C++ heap corruption detected
C++ Heap corruption detected
C++ Ошибка HEAP CORRUPTION
C++ Heap Corruption detected (
C++ Malloc - heap corruption
C++ Heap corruption detected
C++ Heap corruption detected
Heap in C++ C++
C++ Heap in C++
C++ Heap Corruption Detected

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4817 / 3237 / 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
Ответ Создать тему
Опции темы

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