C ++ векторная и структурная проблема win32 - PullRequest
2 голосов
/ 14 июня 2010

У меня есть структура, определенная в моем заголовочном файле:

struct video
{
 wchar_t* videoName;
 std::vector<wchar_t*> audio;
 std::vector<wchar_t*> subs;
};
struct ret
{
std::vector<video*> videos;
wchar_t* errMessage;
};
struct params{
 HWND form;
 wchar_t* cwd;
 wchar_t* disk;
 ret* returnData;
};

Когда я пытаюсь добавить свою структуру видео в вектор видео * Я получаю нарушение прав доступа, читая 0xcdcdcdc1 (videoName равно @ 0xcdcdcdcd, прежде чем я его выделю)

//extract of code where problem is
video v;
v.videoName = (wchar_t*)malloc((wcslen(line)+1)*sizeof(wchar_t));
wcscpy(v.videoName,line);
p->returnData->videos.push_back(&v); //error here

1 Ответ

3 голосов
/ 14 июня 2010

Я бы предположил, что либо p, либо p->returnData является неинициализированным / недействительным указателем.

Кроме того, это не приведет к сбою, но поможет исправить текущую проблему: остерегайтесь возврата указателя на локальную переменную. Как только ваша функция выйдет из области видимости, локальный вектор будет уничтожен, а &v станет недопустимым указателем. Если вы хотите, чтобы ваш вектор существовал за пределами текущей функции, вам нужно выделить его в куче:

vector *v = new video();
...
p->returnData->videos.push_back(v);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...