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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2010, 17:28   #1
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию delete []

Доброго времени суток!

Хотелось бы понять, почему в следующем коде:

Код:
	char* pPath = "Hello!";

	char* bufPath = new char[strlen(pPath)+1];
	strcpy_s(bufPath, strlen(bufPath), pPath);

	if(bufPath)
		delete [] bufPath;
При попытке очистить память, занимаемую bufPath, выходит ошибка:

Цитата:
Windows has triggered a breakpoint in consol.exe.

This may be due to a corruption of the heap, which indicates a bug in consol.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while consol.exe has focus.
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 15.01.2010, 17:45   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Может быть, дело в этом:
Код:
strcpy_s(bufPath, strlen(bufPath), pPath);
Попробуйте лучше через strlen(pPath)?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 15.01.2010, 19:44   #3
nazavrik
Форумчанин
 
Аватар для nazavrik
 
Регистрация: 01.09.2008
Сообщений: 178
По умолчанию

Я пробовал. Через strlen(pPath) он вообще матом ругается...
Быть радикальным - значит понять вещь в её корне. К.Маркс
nazavrik вне форума Ответить с цитированием
Старый 15.01.2010, 22:09   #4
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Код:
char* pPath = "Hello!";

	char* bufPath = new char[strlen(pPath)+1];

	strncpy(bufPath, pPath, strlen(pPath)+1);

	if(bufPath)
		delete [] bufPath;
Вот так работает.

Последний раз редактировалось Carbon; 15.01.2010 в 22:13.
Carbon вне форума Ответить с цитированием
Старый 15.01.2010, 22:16   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Или в strcpy_s тоже надо +1 добавить.
Carbon вне форума Ответить с цитированием
Старый 15.01.2010, 22:40   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
strncpy(bufPath, pPath, strlen(pPath)+1);

сорри, конечно нужно добавить в получаемую строку завершающий нуль. в данном случае этот нуль просто скопируется из сорс строки
чтобы такого не возникало, лучше делать это явно:
Код:
	const char* str = "Hello!";
	const int len = strlen(str);
	char* buff = new char[len + 1]; //выделили память под размер строки + для завершающего нуля
	strncpy(buff, str, len); //скопировали строку
	buff[len] = '\0'; //записали нуль
	delete [] buff;
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 15.01.2010 в 22:59.
pproger вне форума Ответить с цитированием
Старый 15.01.2010, 22:46   #7
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Код:
if(bufPath)
Проверять указатель не нужно..
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
delete в visual c++ sergei64_89 Помощь студентам 0 06.06.2009 21:53
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14
new,delete alex87 Общие вопросы C/C++ 1 28.02.2008 17:50
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44