gpt4 book ai didi

c - 信号 11 SIG 错误并传递 free 参数 1 使指针来自整数而不进行强制转换

转载 作者:行者123 更新时间:2023-11-30 16:35:52 25 4
gpt4 key购买 nike

我正在编写一个程序来读取和存储 3D 数组,然后打印所有 2D 部分,我收到此警告(对于 free(*mat1)[i][j]):

|warning: passing argument 1 of 'free' makes pointer from integer without a cast|

当我在计算机中运行该程序时,该程序运行得很好,但是当我在系统中提交它时,我收到如下错误:错误类型:SIG

Message: Program was stopped by signal 11 [0.000000 sec]. Either Memory limit of 4000 Kb exceeded or invalid memory operation.

这是我的完整代码:

#include <stdio.h>
#include <stdlib.h>


int main()
{
int m,n,p,i,j,k;
int *** mat1;
scanf("%d",&m);
scanf("%d",&n);
scanf("%d",&p);

mat1 =(int ***) malloc(m * sizeof(int **));
if (mat1 == NULL)
{
printf("Error 1");
exit(1);
}
for(i = 0; i < m; i++)
{
mat1[i] =(int **) malloc(n * sizeof(int *));
if (mat1[i] == NULL)
{
printf("Error 2");
exit(1);
}
for (j=0 ; j<n ; j++)
{
mat1[i][j] = (int * )malloc(p * sizeof(int ));
if (mat1[i][j] == NULL)
{
printf("Error 3");
exit(1);
}

}

}


for(i=0;i<m;i++) // reading matrix A input
{
for(j=0;j<n;j++)
{
for (k = 0 ; k < p ; k++)
scanf("%d",&mat1[i][j][k]);
}

}

for(i=0;i<p;i++) //output matrix A
{
printf("Section %d: \n", i+1);
for(j=0;j<n;j++)
{
for (k = 0 ; k <m ; k++)
{

printf("%d ",mat1[k][j][i]);
}
printf("\n");
}
}


for (i = 0; i < m; i++)
{
for (j = 0; j< n; j++)
free((*mat1)[i][j]); //this row is where the warning is coming from
free((*mat1)[i]);
}
free(*mat1);

return 0;
}

最佳答案

这条线有效:

mat1[i][j] = (int * )malloc(p * sizeof(int ));

因为mat1是一个int***,所以mat1[i][j]是一个int*.

但这不是:

free((*mat1)[i][j]);

因为 *mat1 是一个 int**,所以 (*mat1)[i][j] 是一个 int,这正是提示中的警告。

我相信你想要的是:

free(mat1[i][j]);

对应于上面引用的malloc

关于c - 信号 11 SIG 错误并传递 free 参数 1 使指针来自整数而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48726135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com