C++向量和结构问题的win32
我在头文件中定义的结构:C++向量和结构问题的win32
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
我猜想,要么p
或p->returnData
是一个未初始化的/无效的指针。另外,这不会导致你的崩溃,但是一旦你解决了当前的问题:当心将指针返回给一个局部变量。一旦你的函数超出范围,本地向量将被销毁,&v
将是一个无效的指针。如果你想让你的向量超出当前函数的范围,那么你将需要在堆上分配它:
vector *v = new video();
...
p->returnData->videos.push_back(v);
另外他补充说一个指向局部变量的指针,这也可能导致问题! – mmmmmmmm 2010-06-14 19:11:20
真正的解决方案是将指针丢弃,没有使用它们的目的,但创建额外的工作 – GManNickG 2010-06-14 19:14:25
感谢p-> returnData =(ret *)malloc(sizeof( ret)); 是不是正确的做法,我做了一个新的ret(),它工作的很好 – user366597 2010-06-14 19:18:50
你已经分配了'p-> returnData = new ret()'?无论如何,它看起来像你在栈上创建'v',然后在你的向量中存储一个指向它的指针;不会超过当前函数,所以如果它返回到其他地方,您需要改为'video * v = new video()'。 – Rup 2010-06-14 19:07:08
指针太多。 :(你将'&v'传递给一个向量......将会超出范围的东西的地址!你应该改变你的向量为'std :: vector
你可能需要'std :: wstring'作为'wchar_t'指针的替换 – Amnon 2010-06-14 19:17:25