我的malloc声明有什么问题?

时间:2015-03-20 15:57:22

标签: c arrays

我写了以下代码。问题是,当它进入内部循环时,程序堆栈,因此输入过程停止。我做错了什么?

我在这里做的是创建一个指针数组,每个指针指向一个数组 - 每个不同大小的数组。那么偶数行只需要一个数字,而奇数行需要更多。

long int K,i,j; 
scanf("%ld", &K);   

long int **pl_r;
pl_r = (long int **) malloc(2*K*sizeof(long int *));              

for(i=0; i<K; i++)
{
    pl_r[2*i] = (long int *) malloc(1 *sizeof(long int));
    scanf("%ld", &pl_r[2*i][0]);
    pl_r[2*i+1] = (long int *) malloc(pl_r[2*i][0] *sizeof(long int));
    scanf("%ld", &pl_r[2*i+1][0]);
    for(j=1; j<pl_r[2*i][0]-1; i++){
        scanf("%ld", &pl_r[2*i+1][j]);
    }
}

2 个答案:

答案 0 :(得分:5)

请确保您已添加<stdlib.h>,以避免在未使用malloc进行投射时发出任何警告,因为不应使用malloc进行投射如果我没弄错的话。

然后,为了避免在分配内存时指针和指针之间出现混淆,你可以这样做

pl_r = malloc(K * sizeof *pl_r);

答案 1 :(得分:0)

首先,don't cast the result of malloc。至于问题,第一个malloc应该是:

pl_r = malloc(K*sizeof(long int *))
                                ^ this is missing