C++ Seg故障执行新向量<;字符串>;
以下代码在最后一行获得seg故障:C++ Seg故障执行新向量<;字符串>;,c++,segmentation-fault,C++,Segmentation Fault,以下代码在最后一行获得seg故障: HookAct *act = new HookAct; act->hkAct = HookAct::PRINT; act->params = new vector<string>; 有人知道它为什么这样做吗 仅供参考,以下是HookAct的[当前、临时]定义: struct HookAct { enum { PRINT } hkAct; vector<string&g
HookAct *act = new HookAct;
act->hkAct = HookAct::PRINT;
act->params = new vector<string>;
有人知道它为什么这样做吗
仅供参考,以下是HookAct的[当前、临时]定义:
struct HookAct {
enum {
PRINT
} hkAct;
vector<string> *params;
};
struct-HookAct{
枚举{
印刷品
}香港法例;
向量*参数;
};
您粘贴的代码很好
我认为您的问题可能是将
NULL
字符串添加到向量act->params
粘贴的代码没有问题
我认为您的问题可能是将NULL
字符串添加到向量act->params中,因为错误消息指向str::string
被初始化为NULL
,这是禁止的。但是,您的代码看起来像是由来自Java或C#的人编写的,并且习惯于无意识地new
一切。但是,在C++中,自动存储是首选的。p>
如果您将代码更改为此
struct HookAct {
enum {
PRINT
} hkAct;
vector<string> params;
HookAct() : hAct(HookAct::PRINT), params() {}
};
如图所示,错误消息指向使用NULL
初始化的str::string
,这是禁止的。但是,您的代码看起来像是由来自Java或C#的人编写的,并且习惯于无意识地new
一切。但是,在C++中,自动存储是首选的。p>
如果您将代码更改为此
struct HookAct {
enum {
PRINT
} hkAct;
vector<string> params;
HookAct() : hAct(HookAct::PRINT), params() {}
};
你发布的代码块没有问题。错误的原因可能是代码中的其他地方。无法使用给定的代码进行复制。是的,问题似乎是您实际为act->params赋值的位置。你周围没有像act->params=“sometstring”
这样的东西吗?我同意卡萨布兰卡的观点;当STL或标准库函数发生故障时,可能是由于缓冲区溢出或早期代码中的某些内容造成的。您发布的代码块没有问题。错误的原因可能是代码中的其他地方。无法使用给定的代码进行复制。是的,问题似乎是您实际为act->params赋值的位置。你周围没有像act->params=“sometstring”
这样的东西吗?我同意卡萨布兰卡的观点;当STL或标准库函数发生故障时,可能是由于缓冲区溢出或早期代码中的某些内容造成的。
HookAct hookAct;