![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| VisualC++6.0 |
|
|||
|
Unregistered |
Как можно побороть такую штуку:
во время разработки программы стоит режим компиляции Debug, free(buffer) вызывает debug error, включаю режим компиляции Release работает нормально. char * buffer = NULL; - объявлена глобально в одном потоке программа делает следующее: ///////////////////////////////////////////////////////////////////////// ret = recv(sock, szBuffer, DEFAULT_BUFFER, 0) if ((buffer = (char*)malloc(ret * sizeof(char))) == NULL) { LogLineAdd("not enougth space for buffer\n"); } strcpy(buffer, szBuffer); ///////////////////////////////////////////////////////////////////////// в другом потоке что -то делаю с этим buffer и пытаюсь освободить память: ///////////////////////////////////////////////////////////////////////// free(buffer); // и ошибка если Debug ///////////////////////////////////////////////////////////////////////// |
|||
|
||||
| Mad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Эксперт Сообщений: 656 Регистрация: 18.10.2004 Где: Одесса Репутация: 7 Всего: 19 |
Дело в том что malloc выделяет память в heap текущего потока, и другой поток, соответственно, управлять ей не может.
Замени malloc,free на new,delete или на GlobalAlloc,GloballFree. |
|||
|
||||
| VisualC++6.0 |
|
|||
|
Unregistered |
Спасибо!
не знал что поток использует свою кучу, а не кучу процесса.... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |