Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> malloc возвращает NULL 
:(
    Опции темы
malor
  Дата 5.4.2012, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Код
void GetPathSession()
{
    int SizeAppData;
    wchar_t* AppData;

    wchar_t* pathEvent;
    wchar_t* pathDir;

    AppData = _wgetenv(_T("APPDATA"));
    SizeAppData = wcslen(AppData);

    pathEvent = (wchar_t *)malloc(SizeAppData + 1);
    wcscpy(pathEvent, AppData);
    wcscat(pathEvent, _T("\\Winamp\\winamp.ini"));
    
    pathDir = (wchar_t *)malloc(SizeAppData + 1);

    dwError = GetLastError();
    wcscpy(pathDir, AppData);
    wcscat(pathDir, _T("\\Winamp\\"));
}


user posted image

Win7 64-bit / RAM 4 Gb / MSVS2008
PM MAIL   Вверх
feodorv
Дата 5.4.2012, 10:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



А чему равно SizeAppData?
Судя по всему, правильное значение этой переменной перезаписывется в момент wcscpy или wcscat, так как первый заказ памяти идёт побайтно (а нужно по-символьно: sizeof(wchar_t) * (SizeAppData + 1)), плюс, всё-таки, как-то заказывать надо с избытком, расчитывая на wcscat(pathEvent, _T("\\Winamp\\winamp.ini")), а на _T("\\Winamp\\winamp.ini") размер заказанной памяти не расчитан...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
malor
  Дата 5.4.2012, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Спасибо, feodorv !

Код
void GetPathSession()
{
    int SizeAppData;
    wchar_t* AppData;

    AppData = _wgetenv(_T("APPDATA"));
    SizeAppData = wcslen(AppData);

    wchar_t* pathEvent;
    wchar_t* pathDir;
    pathEvent = (wchar_t*)malloc(sizeof(wchar_t)*(SizeAppData + 1) + 36);
    wcscpy(pathEvent, AppData);
    wcscat(pathEvent, _T("\\Winamp\\winamp.ini"));                // 18 символов
    
    pathDir = (wchar_t*)malloc(sizeof(wchar_t)*(SizeAppData + 1) + 16);

    dwError = GetLastError();
    wcscpy(pathDir, AppData);
    wcscat(pathDir, _T("\\Winamp\\"));                            // 8 символов
}

PM MAIL   Вверх
feodorv
Дата 5.4.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(malor @  5.4.2012,  12:23 Найти цитируемый пост)
pathEvent = (wchar_t*)malloc(sizeof(wchar_t)*(SizeAppData + 1) + 36);
    wcscpy(pathEvent, AppData);
    wcscat(pathEvent, _T("\\Winamp\\winamp.ini"));                // 18 символов

Как мне кажется, логичнее сделать так:
Код

pathEvent = (wchar_t*)malloc(sizeof(wchar_t)*(SizeAppData + 1 + 18));
    wcscpy(pathEvent, AppData);
    wcscat(pathEvent, _T("\\Winamp\\winamp.ini"));                // 18 символов

или даже через #define и sizeof...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.