Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при освобождении памяти,выделенной динамически.

52K
24 марта 2010 года
Karpo
12 / / 04.12.2009
Имеется код:
Код:
char* koef2;
double* tsel;
tsel=new double[m_peremen];
k=0;
int size;
for(i=2;k<m_peremen;i=i+2)
{
 vse[0].GetWindowText(koef);
 size=koef.GetLength();
 koef2=new char[size];
 koef2=koef.GetBuffer(size);
 tsel[k]=atof((const char *)koef2);
 delete [] koef2;
 k++;
}

На строке
 
Код:
delete [] koef2;

Программа вылетает и выскакивает сообщение
Debug Assertion Failed
Program:...менты\Visual Studio 2008\Projects\Neprosto\Debug\Neprosto.exe
File:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line:1317
Expression: _crtisvalidHeapPointer(pUserdata)

Я весь поиск перепахал,но советов,которые бы помогли не нашёл.Подскажите пожалуйста,в чём проблема?
397
24 марта 2010 года
SergPas
527 / / 03.02.2007
Вы меня, конечно, извините, но где Вы так научились копировать строки?[FONT=monospace]
[/FONT]
Цитата:
koef2=koef.GetBuffer(size);

9.7K
24 марта 2010 года
oltzowwa
105 / / 15.02.2007
Про GetBuffer:
http://sources.ru/cpp/mfc/string/cstring_14.htm

То есть получается, что при
 
Код:
koef2=koef.GetBuffer(size);
koef2 присваивается указатель на символьную строку koef, а та память, которая выделилась при
 
Код:
koef2=new char[size];
просто потерялась? Поэтому на строке
 
Код:
delete [] koef2;
программа вылетает?
11
24 марта 2010 года
oxotnik333
2.9K / / 03.08.2007
oltzowwa, вы спрашиваете или утверждаете
если первое, то ответ "да"
1
24 марта 2010 года
kot_
7.3K / / 20.01.2000
Если второе - то тоже правильно. :)
Ошибка автора - классический memory leak. И в полне годен в качестве примера для иллюстрации типичных ошибок.
52K
24 марта 2010 года
Karpo
12 / / 04.12.2009
Всем спасибо.Я вроде понял,в чём ошибка,но насколько мне известно,функции по этому


адресу используются для работы с char'овскими массивами,а мне нужно извлечь строку из CString в массив char.

Цитата:
Вы меня, конечно, извините, но где Вы так научились копировать строки?


К сожалению по-другому преобразовывать CString в массив char я не умею:(
Ещё раз всем спасибо.

518
13 апреля 2010 года
Andreika
101 / / 14.02.2003
Цитата: Karpo

К сожалению по-другому преобразовывать CString в массив char я не умею:(
Ещё раз всем спасибо.



(LPCTSTR)MyCStringVariable

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог