![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
такая проблема.vc++2008.
LPWSTR str = new wchar_t[GetNumDigits(n)+1]; //тут работаю с этой структурой delete[]str; вот при удалении выдает ошибку в куче.В borland с такими проблемами не сталкивался.если сделать str = NULL; delete[] str; то срабатывает,но при этом можно в debug увидить + str 0x00000000 <Неправильный указатель> wchar_t * Объясните пожалуйста как решить проблему. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,821
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
мне кажется вы плохо прочли.Это не логично признаю,но это единственное,что срабатывает-указано новичко в каком-то форуме MSDN.
Логичнее было бы просто воспользоваться delete[]str -но это не срабатывает.Так как удалить динамически выделенный массив?В борланде код похожий на этот: LPWSTR str = new wchar_t[GetNumDigits(n)+1]; ...//остальной код delete[]str; срабатывает без проблем,но в vc++ 2008выдает ошибку.И любые модификации,например 1)LPWSTR str = NULL; str =new wchar_t[GetNumDigits(n)+1]; ... delete[]str; 2)LPWSTR str = new wchar_t[GetNumDigits(n)+1]; delete[]str;str=NULL; выдают ту же ошибку с кучей(heap) |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
![]()
Покажите пожалуйста код GetNumDigits.
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]() Код:
извиняюсь за опечатку."пробовал". LPWSTR str = new wchar_t[255]; ...delete[]str; выдало ту же ошибку.Про нее многое написано в msdn:использование new/delete и ошибка возникающая с кучей при этом,но конкретного ответа нет. Скажу,что опыт в прграммировании у меня 2года,но пользовался Борландом и освобождение памяти не вызывало таких проблем. Буду блогадарен за любую помощь. Последний раз редактировалось Stilet; 12.12.2010 в 19:46. |
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
Здравствуйте,Syuf.
Вы не знайте как исправить возникшую с кучей проблему? |
![]() |
![]() |
![]() |
#7 |
Software Engineer
Участник клуба
Регистрация: 07.04.2007
Сообщений: 1,618
|
![]()
А что вы делаете во время
"//тут работаю с этой структурой" Может там уже освобождается память?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
Спасибо,что откликнулись.
Я не смог найти такого места в своей процедуре. Если память и очищается до явного вызова delete, то не могли бы вы мне указать в каком месте?вот код функции: void draw_top(int &n, POINT point[], POINT P, HDC hdc) { int ht, wt; point[n].x = P.x; point[n].y = P.y; Ellipse(hdc, point[n].x - 20, point[n].y - 20, point[n].x + 20, point[n].y + 20); SIZE t_size; LPWSTR str = new wchar_t[GetNumDigits(n)+1]; //конвертируем в строку число n _itow_s(n,str,lstrlen(str),10); GetTextExtentPoint32(hdc, str,lstrlen(str),&t_size); ht = t_size.cy; wt = t_size.cx; TextOut(hdc, point[n].x - wt/2, point[n].y - ht/2, str, lstrlen(str)); // str = NULL; delete[]str; n++; |
![]() |
![]() |
![]() |
#9 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
извиняюсь за плохо скопированый код(не скопировал '}')
void draw_top(int &n, POINT point[], POINT P, HDC hdc) { int ht, wt; point[n].x = P.x; point[n].y = P.y; Ellipse(hdc, point[n].x - 20, point[n].y - 20, point[n].x + 20, point[n].y + 20); SIZE t_size; LPWSTR str = new wchar_t[GetNumDigits(n)+1]; //конвертируем в строку число n _itow_s(n,str,lstrlen(str),10); GetTextExtentPoint32(hdc, str,lstrlen(str),&t_size); ht = t_size.cy; wt = t_size.cx; TextOut(hdc, point[n].x - wt/2, point[n].y - ht/2, str, lstrlen(str)); // str = NULL; delete[]str; n++; } |
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 21.10.2010
Сообщений: 15
|
![]()
Думаю,что ошибка кроется в GetNumDigits.
Всем спасибо,навели на мысль.Далее справлюсь. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
проблема с удалением файла | katttes | Общие вопросы Delphi | 3 | 30.04.2010 13:17 |
помогите, пожалуйста, с удалением массива char в с++! | Mira-girl | Общие вопросы C/C++ | 2 | 09.11.2009 00:50 |
Проблема с удалением файлов. | Dj_smart | Общие вопросы Delphi | 4 | 22.03.2008 12:32 |
Ошибка с удалением | pr1de | БД в Delphi | 1 | 08.05.2007 03:44 |