C++ vector 和结构体问题 win32

标签 c++ winapi vector struct

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

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

最佳答案

我猜测 pp->returnData 是未初始化/无效的指针。

此外,这不会导致您崩溃,但一旦您修复当前问题,它就会导致崩溃:小心返回指向局部变量的指针。一旦您的函数超出范围,本地 vector 将被销毁,并且 &v 将成为无效指针。如果您希望 vector 存在于当前函数的范围之外,那么您需要在堆上分配它:

vector *v = new video();
...
p->returnData->videos.push_back(v);

关于C++ vector 和结构体问题 win32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3040095/

相关文章:

c++ - 私有(private)构造函数错误 C++

c++ - 没有匹配的调用函数

C++ vector 、const char *、变量作用域和生命周期

c++ - 使函数接受其参数列表的任何排列的规范方法是什么?

c++ - 如何重启QtSingleApplication?

c - EnumWindows 和 CloseHandle

visual-c++-2010 - 无法卸载VC++2010 : Error: A newer version of Microsoft Visual C++ 2010 Redistributable has been detected on the machine

时间:2019-05-17 标签:c++win32: basic string handling

c++ - 从长(且合理)稀疏 vector 中选择随机元素的最有效方法是什么?

c++ - 商业产品的Qt许可证