我在头文件中定义了一个结构:

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

最佳答案

我想pp->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/

10-15 04:53
查看更多