我在头文件中定义了一个结构:
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;
};
当我尝试将视频结构添加到视频 vector *时,我收到访问冲突,读取 0xcdcdcdc1(在分配它之前,视频名称为 @ 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
最佳答案
我猜测 p
或 p->returnData
是未初始化/无效的指针。
此外,这不会导致您崩溃,但一旦您修复当前问题,它就会导致崩溃:小心返回指向局部变量的指针。一旦您的函数超出范围,本地 vector 将被销毁,并且 &v
将成为无效指针。如果您希望 vector 存在于当前函数的范围之外,那么您需要在堆上分配它:
vector *v = new video();
...
p->returnData->videos.push_back(v);
关于C++ vector 和结构体问题 win32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3040095/