gpt4 book ai didi

c - 二维数组动态分配中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:48:13 26 4
gpt4 key购买 nike

此代码在 n=10,000 时运行良好,但在具有 2GB 内存的机器上 n=100,000 时运行良好。在具有 1GB 内存的机器上为 n=10,000 调用了 kswap0,但立即显示 n=100,000 的段错误。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int **createMatrix(int n)
{
int **mat=(int**)malloc(n*sizeof(int*));
int i;
for(i=0;i<n;i++)
{
mat[i]=(int*)malloc(n*sizeof(int));
}
return mat;
}
void display(int **mat, int n)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d\t",mat[i][j]);
}
printf("\n");
}
}
int main()
{
int n=100000;
int **matrixOne=createMatrix(n);
int **matrixTwo=createMatrix(n);
int **resultantMatrix=createMatrix(n);
srand(time(NULL));
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
matrixOne[i][j]=rand()%10;
matrixTwo[i][j]=rand()%10;
}
}
display(matrixOne,n);
display(matrixTwo,n);
int k;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
for(k=0;k<n;k++)
{
resultantMatrix[i][j]+=matrixOne[i][k]*matrixTwo[k][j];
}
}
}
display(resultantMatrix,n);
for(i=0;i<n;i++)
{
free(matrixOne[i]);
free(matrixTwo[i]);
free(resultantMatrix[i]);
}

提前致谢!

最佳答案

一个 int 是 4 个字节。在 createMatrix 中,忽略第一个 malloc,您正在分配 n * n * sizeof(int) 字节。对于 n=100,000,这是 40,000,000,000 字节,或大约 40 GB。由于您要执行此操作 3 次,因此您需要大约 120 GB 的 RAM,而您没有。对于 n = 10,000,您只需要大约 1.2 GB,这是您拥有的(包括交换空间)。

如评论所述,您应该检查 malloc 的结果以获得更清晰的错误消息,并避免段错误。

关于c - 二维数组动态分配中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25123812/

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