Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
alvor
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 7
#1

Недопустимая операция при выполнении оператора delete[]

26.02.2008, 15:18. Просмотров 1023. Ответов 6
Метки нет (Все метки)

Проблема у меня такая. Есть функция. Кусок ее кода выглядит примерно так:
C++
1
2
3
4
5
6
7
8
9
10
//... получам M и N
float *pArr1 = new float [M];
int *pArr2 = new int [M];
int *pArr3 = new int [N];
int *pArr4 = new int [N];
//... что то делаем с массивами
delete [] pArr1;
delete [] pArr2;
delete [] pArr3;
delete [] pArr4;
Компилируется это все без проблем (под MSVC 6.0). А вот при выполнении программы производится некая недопустимая операция именно на инструкциях delete []. Если все четыре строки с delete убрать -- то все работает без проблем.
В чем может быть ошибка? Если кто знает, помогите плз.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2008, 15:18
Ответы с готовыми решениями:

Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"?
class test { public: void a() { std::cout << "test::a" << std::endl; }...

Ошибка при рекурсивном вычислении: "недопустимая операция с плавающей точкой"
double kor(double a) { double x=0.5*(1+a); if (fabs(x-a)>0.0001)...

Как компилятор узнаёт о размере массива при выполнении операции delete?
Такой глупый вопрос появился при изучении операций new и delete. Я создаю...

Ошибка при использовании оператора delete в Visual Studio 2010
Изучаю указатели в C++. Есть следующий код: #include <iostream> #include...

Ошибка при выполнении оператора присваивания производного класса через указатель на базовый
Здравствуйте, не могу понять из-за чего ошибка. Надо в производном классе...

6
boombastik
7 / 7 / 11
Регистрация: 13.02.2007
Сообщений: 1,255
26.02.2008, 17:32 #2
А ты уверен, что что-то не напутал, потому что код который ты привел (я не вставлял ничего вместо '//... что то делаем с массивами') работает прекрасно без всяких ошибок.

С уважением, Владимир
0
alvor
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 7
26.02.2008, 18:25  [ТС] #3
На 100% не поручусь, но:
1)Этот же код под win2k компилировался и работал без проблем.
2)Вычисления, реализуемые данной функцией (опущены из-за громоздкости), возвращают верный окончательный результат, и промежуточные результаты тоже верны.
3)Ошибок, связанных за выходом за границы массивов я не нашел -- специально проврял. Других ошибок, правда, тоже не нашел ;-), так что, вероятно, это не показатель.

Пока я заменил днамические массиы на статические заведомо большой размерности -- код прошел.

Если появятся какие идеи -- пишите.
Спасибо.
Alvor
0
Archie
28.02.2008, 14:26 #4
Вероятно где-то закралась ошибка в коде между выделением и освобождением памяти
Archie
28.02.2008, 14:30 #5
... и еще, почему бы не сделать просто отдельный тест ? это прояснит, стоит ли пенять на компилятор
успехов
NetMinon
0 / 0 / 1
Регистрация: 16.12.2006
Сообщений: 88
28.02.2008, 16:45 #6
очевидно ты вылез за пределы массивов....
0
svetogor
22 / 22 / 7
Регистрация: 01.02.2017
Сообщений: 54
Записей в блоге: 1
04.02.2017, 13:55 #7
Только что у себя такую ошибку обнаружил. Visual Studio такие ошибки не отслеживает, откуда из *** выскакивает assert с утверждением чего то непонятного - в отладчике нет текста, где возникает ошибка... Создаётся впечатление, что этот косяк в VS, но это не так. У меня одна строка не завершалась нулём, ф-ция читала её дальше, не пытаясь туда что то записывать. Но после ошибка удаления возникала именно потому что я пытался читать за пределами выделенной в heap'е памяти.
0
04.02.2017, 13:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2017, 13:55

Операция delete в векторе
Привет, друзья, делаю маленькую игрушку, там у меня постоянно появляются и...

Назначение оператора delete[]
Для освобождения динамической памяти от массива предлагают оператор delete...

Перегрузка оператора new и delete
привет! подскажите, каким образом можно перегрузить операторы new и delete?...


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

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

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