我正在创建一个包含地图的结构,但是当我尝试插入一个元素时,它会引发分段错误
#include<stdio.h>
#include<stdlib.h>
#include<map>
using namespace std;
typedef struct a
{
map<int,int> m;
}a;
int main()
{
a* b;
b=(a*) malloc(sizeof(a));
b->m[0]=0;
}
您的代码甚至都没有开始类似于惯用的 C++,任何人可以向您推荐的最好的事情就是拿起一本关于 C++ 的好书。
程序的快速修复:使用new
而不是malloc
-malloc
不属于 C++ 代码。这将确保a->m
实际构建。然后,一定要b
在最后删除。这带来了 的所有问题new/delete
,所以当您对 C++ 的基础知识有所了解时,请阅读智能指针。
稍微更剧烈的变化,这将在您的简单程序中减少问题:使用自动存储:
a b;
b.m[0] = 0;
这将是您的 C++ 程序,而不是奇怪的 C/C++ 组合:
#include<map>
struct a
{
std::map<int,int> m;
};
int main()
{
a b;
b.m[0]=0;
}
使用new
运算符动态分配内存,否则在使用时不会调用结构中映射的构造函数malloc
。
int main()
{
a* b;
b= new a;
b->m[0]=0;
// Do whatever here
// When you're done using the variable b
// free up the memory you had previously allocated
// by invoking delete
delete b;
return 0;
}