Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
SungMaster
1 / 1 / 0
Регистрация: 25.10.2010
Сообщений: 29
1

Heap corruption detected

31.01.2016, 19:12. Просмотров 418. Ответов 6
Метки нет (Все метки)

В процессе разработки получилась интересная ситуация. Есть такой код

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char **map;
map = (char**)calloc(mapYsize, sizeof(char*));
for (i = 0; i < mapYsize; i++){
    map[i] = (char*)calloc(mapXsize, sizeof(char));
    for (j = 0; j < mapXsize; j++){
        fscanf(tFile, "%hhd", &(map[i][j]));
        if (map[i][j] >= 10){ map[i][j] = 10; }
    }
}
...
for (i = 0; i < mapYsize; i++){
    free(map[i]);
}
free(map);
Когда доходит до освобождения одномерных подмассивов, вылетает HEAP CORRUPTION DETECTED (при чём на каждой итерации цикла). Замена calloc на malloc или char на short ситуацию не меняет. Падает как на компиляторе MS VS, так и на gcc. Что может послужить причиной проблемы и как ее решить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2016, 19:12
Ответы с готовыми решениями:

HEAP CORRUPTION DETECTED
На строчке 36 с очисткой памяти постоянно вылетает ошибка дебага :( HEAP...

Задача на работу с динамическим массивом. HEAP CORRUPTION DETECTED
Не понимаю причину ошибки. Подскажите пожалуйста. // pmArray.cpp :...

Что может означать такая ошибка: "Heap corruption detected"
Что может означать такая ошибка? переполнение памяти?

Очередь с приоритетом (Min heap)
Доброе утро. Подскажите пожалуйста как реализовать очередь с приоритетом (min...

Найти ошибку в процедуре сортировки Heap (пирамида)
вот код ,не знаю почему не работает ...

6
nd2
2888 / 2444 / 1068
Регистрация: 29.01.2016
Сообщений: 8,137
31.01.2016, 19:26 2
Портишь где-нибудь память, вот и ошибка. Память у тебя под char, а что туда читаешь?
0
SungMaster
1 / 1 / 0
Регистрация: 25.10.2010
Сообщений: 29
31.01.2016, 19:35  [ТС] 3
Цитата Сообщение от nd2 Посмотреть сообщение
Память у тебя под char, а что туда читаешь?
Числа от 0 до 62
0
nd2
2888 / 2444 / 1068
Регистрация: 29.01.2016
Сообщений: 8,137
31.01.2016, 19:43 4
Цитата Сообщение от SungMaster Посмотреть сообщение
Числа от 0 до 62
Формат чтения на это замени:
C++
1
"%с"
И посмотри, останется ли ошибка.
0
SungMaster
1 / 1 / 0
Регистрация: 25.10.2010
Сообщений: 29
31.01.2016, 19:46  [ТС] 5
Цитата Сообщение от nd2 Посмотреть сообщение
Формат чтения на это замени:
C++Выделить код
1
"%с"
И посмотри, останется ли ошибка.
Не сработает. Файл текстовый, а не бинарный.
0
nd2
2888 / 2444 / 1068
Регистрация: 29.01.2016
Сообщений: 8,137
31.01.2016, 19:52 6
Цитата Сообщение от SungMaster Посмотреть сообщение
Не сработает. Файл текстовый, а не бинарный.
А ты попробуй, просто не всё прочитается, что нужно, но ошибки, при освобождении памяти, быть уже не должно.

Добавлено через 1 минуту
Если не хочешь память под числа (int) выделять, то используй бинарные методы записи/чтения, иначе будешь память портить.
1
SungMaster
1 / 1 / 0
Регистрация: 25.10.2010
Сообщений: 29
31.01.2016, 19:59  [ТС] 7
Хм, действительно помогло сначала читать в int, а потом писать в массив.
0
31.01.2016, 19:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2016, 19:59

Critical error detected c0000374
В общем ошибка возникает если использовать определение BACKSIZE при выделении...

Почему в Си массив со статическим размером объявленный внутри функции помещается в stack, а не в heap?
Собственно, сабж. Чем было обусловленно такое решение? В джава, например,...

Выделение памяти и ошибка Heap block at 00B515A0 modified at 00B515B9 past requested size of 11
Доброго времени суток! есть такой кусок кода: size_t read_lines(char...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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