结构内部地图上的分割故障

Segmentation Fault on map inside structure

本文关键字:分割 故障 内部 地图 结构      更新时间:2023-10-16

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

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