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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2011, 22:37   #1
pure
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 10
По умолчанию Проблема new delete[]

Здравствуйте. Проблема следующего характера...
Я нашёл на одном из форумов как перевести из String^ в char*.
Вот пример кода:

Код:
char* path=(char*)(void*)Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text);
...
delete[]path;
Проблема кроется в освобождении памяти выделенной под path...
Выскакивает ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse), хотелось бы написать код с delete'ом, а не тупо убрав его и решив проблему
pure вне форума Ответить с цитированием
Старый 15.01.2011, 23:49   #2
oleg kutkov
Unix C++ developer
Форумчанин
 
Аватар для oleg kutkov
 
Регистрация: 16.04.2007
Сообщений: 651
По умолчанию

Цитата:
Сообщение от pure Посмотреть сообщение
Здравствуйте. Проблема следующего характера...
Я нашёл на одном из форумов как перевести из String^ в char*.
Вот пример кода:

Код:
char* path=(char*)(void*)Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text);
...
delete[]path;
Проблема кроется в освобождении памяти выделенной под path...
Выскакивает ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse), хотелось бы написать код с delete'ом, а не тупо убрав его и решив проблему
Эт вообще че? Собственно я не вижу тут new (или он делается внутрях этой страшной функции ?), на месте delete я бы тоже упал... И вообще для перевода std string в char* юзайте .c_str()
Код:
string sstr;
char *cstr = sstr.c_str();
oleg kutkov вне форума Ответить с цитированием
Старый 16.01.2011, 00:10   #3
pure
Пользователь
 
Регистрация: 29.01.2010
Сообщений: 10
По умолчанию

хм... new и правд нет, что-то я туплю уже)
но я работаю с системной строкой String^,а не String. у String^ нет c_str()

исправил на это:

Код:
char* path=(char*)Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox1->Text).ToPointer();
...		 
Runtime::InteropServices::Marshal::FreeHGlobal(IntPtr(path));
работает и память освобождается. всё ок
pure вне форума Ответить с цитированием
Старый 16.01.2011, 07:12   #4
like-nix
Форумчанин
 
Регистрация: 09.11.2009
Сообщений: 104
По умолчанию

Это С++\CLI
like-nix вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
delete asko Помощь студентам 0 15.04.2010 16:16
error C2541: 'delete' : cannot delete objects that are not pointers novokhatsky Общие вопросы C/C++ 2 14.12.2009 10:25
Перегрузка операций new, new[], delete, delete[] IgorKr Общие вопросы C/C++ 1 22.10.2008 12:14
Проблема с "delete"ом! SeregaIRK Общие вопросы Delphi 2 15.07.2008 10:23