0

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

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

 }
4

2 回答 2

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;
}
于 2013-03-03T10:15:42.820 回答
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;
}
于 2013-03-03T10:20:12.630 回答