gpt4 book ai didi

c - malloc 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:25 25 4
gpt4 key购买 nike

当使用 malloc() 为二维数组分配内存时,当输入大小(矩阵 N*N)大于 5(即, N>5).

下面的代码适用于小于 5 的输入 (N)。

你能帮我解决这个问题吗?

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

int main(){
int n;
int i,j;
int **adj;
//reading size of a N*N matrix
scanf("%d",&n);

//dynamically allocating memory for a 2-dimensional array
adj=(int**)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
adj[i]=(int*)malloc(sizeof(int)*n);
}

//taking input from the file
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&adj[i][j]);
}
}

for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d\t",adj[i][j]);
}
printf("\n");
}
return 0;
}

最佳答案

这是不正确的:

adj=(int**)malloc(sizeof(int)*n);

因为您分配的是 int* 数组,而不是 int。更改为:

adj = malloc(sizeof(int*)*n); /* Cast unnecessary. */
/* or: adj = malloc(sizeof(*adj)*n); */

建议检查 scanf() 的返回值以确保正确读取 int:

if (1 == scanf("%d", &n))
{
}

有用的阅读:Do I cast the result of malloc?

关于c - malloc 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12579523/

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