2014-08-28 108 views
0
#include <stdio.h> 
#include <stdlib.h> 

void dim(int*,int); 
int main() 
{ 
    int *array ; 
    int n,i; 
    scanf("%d",&n); 
    dim(array,n); 

    for(i=0;i<n;i++) 
     scanf("%d",&array[i]); 
    for(i=0;i<n;i++) 
     printf("%2d",array[i]); 
} 

void dim(int *array,int n){ 
    array=malloc(n* sizeof(int)); 
} 

为什么这不起作用?我不能这样做?使用函数在C中动态调整大小的数组

我不能通过函数给一个数组的维度?

我试图在互联网上找到这是如何工作的,但我找不到任何东西,所以我更愿意在这里发布它直接的答案。

谢谢!并为我的英语感到抱歉。

回答

6

函数中的array是按值,你在dim分配不影响arraymain,它的内存泄漏通过。

取而代之的是,将指针传递指针:

void dim(int **array,int n){ 
    *array=malloc(n* sizeof(int)); 
} 

,并调用它像:

dim(&array,n); 
+0

但阵列是不是已经指针?谢谢! – exsnake 2014-08-28 03:28:57

+0

@exsnake如果你需要修改一个'int',那么指向'int'的指针就足够了。但是在这里你需要修改一个指向'int'的指针,那么你需要使用一个指向'int'的指针。 – 2014-08-28 03:30:38

+0

非常感谢你! – exsnake 2014-08-31 01:53:55

4

你的价值使暗淡传递指针没有做任何事情来的。你需要一个指针的指针传递到你的函数,像这样:

void dim(int **array, int n) { 
    *array=malloc(n * sizeof(int)); 
} 

然后通过你的阵列中,像这样:

dim(&array, n);