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

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

Войти
Регистрация
Восстановить пароль
 
alvor
0 / 0 / 0
Регистрация: 26.02.2008
Сообщений: 7
#1

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

26.02.2008, 15:18. Просмотров 1015. Ответов 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[] (C++):

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

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

Как компилятор узнаёт о размере массива при выполнении операции delete? - C++
Такой глупый вопрос появился при изучении операций new и delete. Я создаю указатель на массив int с помощью операции new. int size; ...

Ошибка при использовании оператора delete в Visual Studio 2010 - C++
Изучаю указатели в C++. Есть следующий код: #include <iostream> #include <locale> using namespace std; int main() { ...

Операция delete в векторе - C++
Привет, друзья, делаю маленькую игрушку, там у меня постоянно появляются и уничтожаются новые объекты, и я заметил такую вещь: со временем...

Назначение оператора delete[] - C++
Для освобождения динамической памяти от массива предлагают оператор delete #include <iostream> using namespace std; int main() ...

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

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

Повторное применение оператора delete - C++
Это нормально так делать? в одном учебнике нашел: Monster* Borg=new Monster; delete Borg; Borg=0; //Теперь повторный вызов...

Перегрузка глобального оператора delete с параметрами - C++
Столкнулся с проблемой при перегрузке оператора delete с параметрами: почему-то всегда вызывается не мой оператор, а стандартный. Вот...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания - C++
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В данном коротком примере я просто моделирую...


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

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

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