C语言 Issues with malloc



当使用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("%dt",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))
{
}

有用的阅读: 我是否投射 malloc 的结果?

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

将其替换为

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

因为一般来说sizeof(int*) != sizeof(int)

另一个提示:初始化变量!!

除了hmjd指针之外,也许它可能会提供更多的信息。

int p -> p 是 int 类型。

int * p

-> p 是指向 'int' 的指针 (*p) 类型

int ** p -> p 是指向"指向 int 即:(int *)"的指针 (*p) 类型

如果从左边读来写,会更容易理解。

int ** adj -> 您需要两个指针取消引用 ( **) 才能达到值 'int'。

即:内存数组中由"adj"指向的每个位置都应该保存另一个内存块的地址。因此,您需要提供 sizeof(int *),同时分配 'adj'。

相关内容

  • 没有找到相关文章

最新更新