c - 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;}
我该如何解决?
解决方案
我认为您对第一次分配内存有误。
matriz=(int**) calloc(vertices,sizeof(**matriz));
它应该是
matriz=(int**) calloc(vertices,sizeof(*matriz));
因为您想创建格式为 *(matriz+i) 的顶点子数组。所以正确的大小是 sizeof(*matrix)。
还有一个,它取决于你在 main 函数中的 pass 参数。假设您声明了 2 个指针:int *array & int **array。当您在函数中传递它们时,它将返回不同的结果。
推荐阅读
- javascript - 日期不适用于 jquery.countdown 倒计时
- outlook - 如何使用 VSTO 在主页选项卡上添加自定义按钮
- javascript - 将 csv 的第一行移动到标题 HTML
- python - Python 文件未正确重写
- javascript - 强制规范通用闭包类型
- python - _tkinter.TclError:图像“.64485752”不存在
- python - 如何使用多处理并行处理 OpenCV 的图像?
- c# - 如何在 C# 中获取 Active Directory 的类列表
- angular - Angular:如何使用模板引用变量来调用子方法?
- c++ - fprintf 不打印到文件,当文件指针在别处声明时