| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Почему происходит утечка памяти |
| Автор: yngwie19 18.12.2008, 11:18 |
| int WINAPI WinMain(HINSTANCE,HINSTANCE,LPTSTR,int) { char *szText[2]; int value = 10; int number = 50; wsprintf(szText[0],"Значение value = %X",value); wsprintf(szText[1],"value=%#x...number=%d",value,number); MessageBox(NULL,szText[0], "szText[0]", MB_OK); MessageBox(NULL,szText[1], "szText[1]", MB_OK); return 0; } |
| Автор: Andrey44 18.12.2008, 12:02 |
| И какие тут утечки памяти? И кто будет выделять под char *szText[2]; память? И пользуйтесь тэгом КОД |
| Автор: yngwie19 18.12.2008, 12:33 | ||
| Andrey44, у тебя прога после компиляции запускается?, у меня запускается с ошибкой "Прилодение будет закрыто" Во-первых зачем для него выделять память, это же стековый указател, который мы инициализиреум в функции wsprintf(). А во вторых у нас только есть szText[0] и szText[1] Почему так работает:
|
| Автор: Andrey44 18.12.2008, 12:47 | ||
| Да-а-а, с такими знаниями языка вам прямая дорога в книжный магазин. Я вообще удивляюсь как оно у вас компилится.
|
| Автор: mekhanikus 18.12.2008, 12:54 | ||||||
В случае
Указатели на char инициализируются адресами строк {"Привет","Пока"} Если делать так
Указатели остаются не инициализированы никак (содержат мусор), и по команде wsprintf происходит попытка записи значений по произвольному адресу. Чтобы заработало во втором случае, надо выделить память и желательно забить её нулями. Например так
|
| Автор: Rififi 18.12.2008, 13:38 |
| TCHAR szTextх[128][2]; гы. (((: |
| Автор: yngwie19 18.12.2008, 14:11 | ||
Да все нормально, объясните пожалуйста использование _T, Я что-то слышал про MessageBoxA и MessageBoxB это то? |
| Автор: Andrey44 18.12.2008, 16:39 |
| Автор: GremlinProg 18.12.2008, 18:21 | ||
Andrey44, наверное, хотел написать
к чему для 2-х строк 128 2-х символьных массивов ) |
| Автор: yngwie19 19.12.2008, 09:26 | ||||
Скажите в выражении
и
_T для чего используется ? |
| Автор: Andrey44 19.12.2008, 09:39 |
| _T("text") - это макрос который определяет проект собран в юникоде или нет. Если да - то перед строкой подставляется L"text" иначе просто "text" |
| Автор: yngwie19 19.12.2008, 14:37 |
а причем тогда _T ? |
| Автор: Andrey44 19.12.2008, 16:20 |
Модератор: Сообщение скрыто. |