尝试在 C 中创建 2D 数组,但出现堆缓冲区溢出

问题描述 投票:0回答:0

早班,

我是 C 新手,我有一个用于创建图形的结构:

    struct map { 
        int vertices;
        int edges;
        int **edgeMatrix;
        char **names;
    };

然后,当我尝试通过函数 Graph graphNew(int v) 创建一个新图时,我设法创建一个新的空图,将值应用于 g-> 顶点和 g-> 边,但是在创建邻接矩阵时对于边缘,我得到堆缓冲区溢出,我试图在堆上分配边缘指针数组:

    Graph graphNew(int v) {
        assert(v > 0);
        Graph g = malloc(sizeof(Graph));
        if(g == NULL) {
            fprintf(stderr, "Error, no memory allocation!\n");
            exit(EXIT_FAILURE);
        }

        g->vertices = v;
        g->edges = 0;
        g->edgeMatrix = malloc(v * sizeof(int *));   <---- ERROR: 

我到处都看过,但似乎不明白为什么我无法使用 EdgeMatrix 的 malloc 语句创建初始指针数组。我已经使用 GDB 进行了单步调试,g 的地址为 0x602000000010,但是当我点击 malloc 语句时,我生成了这个堆缓冲区溢出错误:

Heap-buffer-overflow error

byte allocation

我尝试了指针内存分配语句的不同组合,即使它们可以编译,我也得到相同的结果。

有人可以帮忙解释为什么我无法分配 int 指针数组来开始填充边缘矩阵吗?

干杯P。

malloc buffer-overflow
© www.soinside.com 2019 - 2024. All rights reserved.