我正在创建一个包含地图的结构 但是当我尝试插入一个元素时,它会抛出分段错误
#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;
}
答案 0 :(得分:7)
你的代码甚至都没有开始类似于惯用的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;
}
答案 1 :(得分:2)
使用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;
}