首页 > 解决方案 > memset 函数的分段错误问题

问题描述

我正在尝试为 2D 矩阵分配内存,但出现分段错误。

int** inicializarMatriz(int **matriz, int vertices){
int i;
matriz=(int**) calloc(vertices,sizeof(**matriz));
for(i=0;i<vertices;i++){
    matriz[i]=(int*) calloc(vertices,sizeof(matriz[i]));
    memset(matriz[i],-1,vertices*sizeof(matriz[i]));
}
return (int **)matriz;}

我该如何解决?

标签: csegmentation-fault

解决方案


我认为您对第一次分配内存有误。

matriz=(int**) calloc(vertices,sizeof(**matriz));

它应该是

matriz=(int**) calloc(vertices,sizeof(*matriz));

因为您想创建格式为 *(matriz+i) 的顶点子数组。所以正确的大小是 sizeof(*matrix)。

还有一个,它取决于你在 main 函数中的 pass 参数。假设您声明了 2 个指针:int *array & int **array。当您在函数中传递它们时,它将返回不同的结果。


推荐阅读