我在头文件中定义了一个结构:
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(在分配它之前,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
最佳答案
我想p
或p->returnData
是未初始化/无效的指针。
同样,这不会导致崩溃,但是一旦解决了当前问题,它将立即解决:当心将指针返回到局部变量。一旦函数超出范围,本地 vector 将被销毁,&v
将成为无效指针。如果希望 vector 超出当前函数的范围,则需要在堆上分配 vector :
vector *v = new video();
...
p->returnData->videos.push_back(v);
关于c++ - C++ vector 和结构问题Win32,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3040095/