Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2014, 18:06   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию Ошибка при освобождннии памяти, с помощью delete

Почему возникает ошибка при освобожднни памяти delete-ом?

Код:
#include <iostream>
#include <conio.h>
using namespace std;
    
void main(void){
	int* int_array = new int[1000];
	int i;
    if (int_array != NULL){
		for (i = 0; i < 1000; i++) 
			int_array[i] = i + 1;
        for (i = 0; i < 1000; i++) 
			cout << *int_array++ << ' ';
		delete int_array;
	}

	char ch = getchar();
}
если сделать так, то норм
Код:
#include <iostream>
#include <conio.h>
using namespace std;
    
void main(void){
	int* int_array = new int[1000];
	int i;
    if (int_array != NULL){
		for (i = 0; i < 1000; i++) 
			int_array[i] = i + 1;
        for (i = 0; i < 1000; i++) 
			cout << int_array[i] << ' ';
		delete int_array;
	}

	char ch = getchar();
}

Последний раз редактировалось zla9_kolu4ka; 03.03.2014 в 19:00.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 03.03.2014, 18:59   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
int* int_array = new int[1000];
...
delete[] int_array;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.03.2014, 19:04   #3
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
delete[] int_array;
то же самое, не помагает
zla9_kolu4ka вне форума Ответить с цитированием
Старый 03.03.2014, 19:06   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Хорошо. Какая задумка в коде? Зачем меняете указатель int_array?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 03.03.2014, 19:13   #5
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
Хорошо. Какая задумка в коде? Зачем меняете указатель int_array?
никакой задумки, видите до выделения и освобождения памяти дошел, пример из мануала этого форума, мне просто стало интересно почему ошибка и все )!
Так норм
delete (int_array - 1000);

Последний раз редактировалось zla9_kolu4ka; 03.03.2014 в 19:27.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 03.03.2014, 19:41   #6
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от zla9_kolu4ka Посмотреть сообщение
никакой задумки, видите до выделения и освобождения памяти дошел, пример из мануала этого форума, мне просто стало интересно почему ошибка и все )!
Так норм
delete (int_array - 1000);
Ну вы же меняете указатель на начало массива. Какого результата вы ожидаете?

Сравните значение указателя при доступе по индексу и при смещении через ++

Код:
cout << int_array << endl;
if (int_array != NULL){
    for (i = 0; i < 1000; i++) 
	int_array[i] = i + 1;
    cout << int_array << endl;
    for (i = 0; i < 1000; i++) 
	cout << *int_array++ << ' ';
    cout << endl << "After moving" << int_array << endl;
}
MaTBeu вне форума Ответить с цитированием
Старый 03.03.2014, 19:56   #7
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
Сравните значение указателя при доступе по индексу и при смещении через ++
да я делал так
delete (int_array - 999);
неправильно посчитал(просто решил прикольнуться, а оказалось так и надо делать )) + я не знал, что надо на начало возвращать(думал все за меня C++ как надо сделает), а то что указатель перемещается в одном случае и остается неподвижным в другом, догадывался ), но не знал, что это важно при удалении указателя
то что перемещается в случае *int_array++ знал 100%
zla9_kolu4ka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при освобождении памяти ICaptureGraphBuilder2 kangreon Общие вопросы Delphi 2 18.01.2013 17:18
Ошибка при очистке памяти alexey_kip Visual C++ 3 12.02.2012 11:55
Ошибка доступа при выделении памяти в чужом процессе Neoteric Общие вопросы Delphi 21 06.12.2010 16:50
Ошибка доступа памяти, при работе с принятой строкой. Zeraim Работа с сетью в Delphi 11 26.01.2010 01:11
Ошибка при заполнениии html форм с помощью TWebBrowser Banana Работа с сетью в Delphi 6 24.08.2007 15:35