代码末尾是否存在段错误(只是为二维数组分配内存并打印结果)?正在打印最后一个 printf
语句,我在最后添加的任何代码都成功运行,然后出现段错误。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n,i,j,**mat;
printf("\nEnter the size of the square matrix: ");
scanf("%d",&n);
*mat = (int **)malloc(n*sizeof(int *));
for(i=0;i<n;i++)
{
mat[i]= (int *)malloc(n*sizeof(int));
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++) printf("%d\t",mat[i][j]=rand()%10*i+j);
printf("\n\n\n");
}
printf("Bye\n");
return 0;
}
从技术上讲,第 8 行(打印在代码中)的 *mat
应该是 mat
,但之后一切正常。提到的代码可以编译(在 gcc 中有明显的不兼容指针类型警告)并且可以正常工作,但最后打印段错误时除外。
如果程序中有段错误,它就不会运行到最后!
最佳答案
*mat = (int **)malloc(n*sizeof(int *));
应该是
mat = (int **)malloc(n*sizeof(int *));
除非我将这一行改成这样,否则程序就会出现段错误。通过纯粹的运气和未定义的行为,您的程序设法运行了一段时间。
也没有必要转换malloc的返回值。 Here您可能不应该这样做的几个原因。
关于c - C程序结束时的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34273675/