2014-10-07 88 views
-1

代碼正在工作,但出現錯誤。返回數組 使用返回引用這個函數 - > void alloc(int ** array,int size)。你怎麼看待這個錯誤?C中的動態數組分配

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

void memoryys(int **array, int size); 
int main() 
{ 
    int i; 
    int in; 
    int *a1; 

    printf("please number of elements "); 
    scanf("%d",in); 
    alloc(&a1,in); 

    for(i=0;i<in;i++){ 
     scanf("d ",&a1[i]); 
    } 
    free(a1); 

    return 0; 
} 

void alloc(int **array, int size){ 
    int i; 
    *array = (int *) malloc(size*sizeof(int)); 
    if (*array == NULL){ 
     printf("Error\n"); 
     exit(-1); 
    } 
} 
+0

不要在C.投'malloc' – crashmstr 2014-10-07 19:11:17

+0

'的scanf( 「d」,&A1 [我]);' - >'scanf(「%d」,&a1 [i]);' – BLUEPIXY 2014-10-07 19:37:13

+0

謝謝你的回答... – HUDUT 2014-10-07 19:52:30

回答

1

你沒有指定在scanf函數變量的地址

scanf("%d",input1); 

應該

scanf("%d",&input1); 

一般來說,最好是用fgets從鍵盤讀取有對用戶輸入的內容進行一定的控制。然後使用sscanf將該值轉換爲您需要的類型。

char line[128]; 
if (fgets(line,sizeof(line), stdin) != NULL) 
{ 
    if (sscanf(line,"%d", &n) == 1) 
    { 
    do something useful 
    } 
    else 
    { 
    puts("invalid input"); 
    } 

} 
+0

謝謝你的回答... – HUDUT 2014-10-07 18:55:36

+0

@HUDUT - 如果答案對你,點擊它。如果不是,請提出問題或留下評論。 – ryyker 2014-10-11 20:19:59

0

在C數組你真的剛剛分配的空間中的連續塊的特定數據類型,int在這種情況下。

在堆,的int陣列創建這樣的:
int array[2][6]; // 2x6的例如2個陣列中的每個爲6點的整數(或2個,每組6分
概念,它或許會看起來像行和列:

 0 1 2 3 4 5 
0 |int|int|int|int|int|int| 
1 |int|int|int|int|int|int| 

實際上,在存儲器中,它具有足夠的空間12 int只是一個連續塊:

|int|int|int|int|int|int|int|int|int|int|int|int| 

的索引操作符:[]提供了一種在視覺上簡單的方式來訪問的元件,其中例如,
陣列[1] [3]將代表第十元件

有關堆上創建的陣列

int **array=0; 

首先,創建必要的指針

array = malloc(sizeof(int *) * 2); //provide two pointers 

給你的指針陣列(由[2]表示)[0] &陣列[1]

現在可以分配每個指針的內存:(由[6]表示)

array[0] = malloc(sizeof(int)*6); //space for 6 ints 
array[1] = malloc(sizeof(int)*6); //space for 6 ints 

這兩個指針指針指向這些位置:

|int|int|int|int|int|int|int|int|int|int|int|int| 
    ^array[0]   ^array[1]  

給你一個二維數組的表示:array[2][6];

不要忘記釋放一切都完成後,每個malloc的,應該有一個免費的:

free(array[0]);  
free(array[1]); 
free(array);