地图内部结构的分段错误

时间:2013-03-03 10:11:04

标签: c++ map struct

  

我正在创建一个包含地图的结构   但是当我尝试插入一个元素时,它会抛出分段错误

#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;

 }

2 个答案:

答案 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;
}