我正在尝试为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;}


我该如何解决?

最佳答案

我认为您对第一个分配内存有问题。

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


它应该是

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


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

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

关于c - memset函数分割错误的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59402782/

10-09 15:07