动态数组在另一个函数中分配

时间:2014-05-15 14:16:06

标签: c memory-management

我试图了解动态内存如何在C中工作。假设我需要使用另一个函数为某些指针分配内存。可能吗?我试过下面的程序,但它在Windows中一直崩溃。

void foo(int** x){
    *x=(int *)malloc(10*sizeof(int));
    int i;
    for(i=0; i<10; i++){
        *x[i] = 0;
    }
}

int main(int argc, char* argv[]){

    int *x;
    int i;
    foo(&x);
    for(i=0; i<10; i++){
        printf("%d\n",x[i]);
    }
    return 0;

}

1 个答案:

答案 0 :(得分:3)

问题出在这条线上。

*x[i] = 0;

在指针取消引用中添加括号。

(*x)[i] = 0;

这是因为x [i]实际上意味着*(x + i)。也就是说,将i添加到指针x以获取新指针并获取该内存位置的值。

现在请记住,x是指向指针的指针。当你想要*x[i]时,**(x+i)可以更容易被理解为*((*x)+i)

可能需要一些思考才能解决问题,但一旦掌握了它,指针很容易。