Seg故障做新的vector <string> </string>

时间:2010-12-14 00:12:09

标签: c++ segmentation-fault

以下代码在最后一行获取seg错误:

   HookAct *act = new HookAct;
    act->hkAct = HookAct::PRINT;
    act->params = new vector<string>;

Valgrind告诉我:

==15551== Process terminating with default action of signal 11 (SIGSEGV)
==15551== Access not within mapped region at address 0x0
==15551== at 0x5927026: std::string::assign(char const*, unsigned long) (in /usr/lib/libstdc++.so.6.0.10)
==15551== by 0x725424A: test (test.cpp:10)

有谁知道为什么要这样做?

仅供参考,这是HookAct的[当前,临时]定义:

struct HookAct {
    enum {
        PRINT
    } hkAct;
    vector<string> *params;
};

2 个答案:

答案 0 :(得分:3)

作为Brian said,错误消息指向str::string初始化为NULL,这是被禁止的。但是,您的代码看起来像是来自Java或C#的人,并且习惯于new一切。但是,在C ++中,首选自动存储。

如果您将代码更改为

struct HookAct {
    enum {
        PRINT
    } hkAct;
    vector<string> params;
    HookAct() : hAct(HookAct::PRINT), params() {}
};

不再需要手动动态内存管理:

HookAct hookAct;

答案 1 :(得分:1)

您粘贴的代码很好。

我认为您的问题可能是在向量NULL中添加act->params字符串。