我有一个map<key_t, struct tr_n_t*> nodeTable
并且我正在尝试执行nodeTable[a] = someNode
,其中a
的类型为typedef long key_t
而someNode
的类型为o_t*
}。
我在stl_function.h执行的下一点遇到了分段错误:
/// One of the @link comparison_functors comparison functors@endlink.
template<typename _Tp>
struct less : public binary_function<_Tp, _Tp, bool>
{
bool
operator()(const _Tp& __x, const _Tp& __y) const
{ return __x < __y; }
};
源代码:
#include <stdio.h>
#include <stdlib.h>
#include <map>
using namespace std;
typedef long key_t;
typedef struct tr_n_t {
key_t key;
map<key_t, struct tr_n_t *> nodeTable;
} o_t;
int main() {
o_t *o = (o_t *) malloc(sizeof(o_t));
o->nodeTable[1] = o;
return 0;
}
我没有正确使用地图吗?
答案 0 :(得分:1)
问题是因为你使用malloc初始化o,它的内存被分配但是它的构造函数没有被调用。
将其更改为o_t *o = new o_t();
,因为使用new
代替malloc
会调用地图的构造函数。
答案 1 :(得分:0)
您正在为o_t
分配空间,但您没有初始化内存。试试这个:
#include <map>
typedef long key_t;
struct o_t {
key_t key;
std::map<key_t, o_t*> nodeTable;
};
int main() {
o_t o;
o.nodeTable[1] = &o;
return 0;
}
答案 2 :(得分:0)
您正在使用C样式malloc
来分配包含C ++类的结构。没有调用std::map
的构造函数,因此该对象无效。您不能将malloc与普通结构一起使用,但不能在需要正确初始化的对象上使用。
尝试将分配更改为
o_t *o = new o_t();