2016-04-09 78 views
-1

我的程序有問題。 我想編寫一個程序,在動態內存上創建一個變量,並從用戶輸入數字。動態內存(calloc)和指針指針[C]

然後,我想創建一個動態數組,並使用該數組的大小,但我看到一個錯誤。 爲什麼?我該如何解決它?

的問題是該行:int* numbersArr = (int*)malloc(sizeof(int) * (*number));

感謝。

#include <stdlib.h> 
#include <stdio.h> 
void FirstFunc(); 
void secondFunc(int* number); 

int main(void) 
{ 
    FirstFunc(); 

    getchar(); 
    return 0; 
} 

    void FirstFunc() 
    { 
    int* number = (int*)malloc(sizeof(int)); 
    // check 
    if (!(number = (int*)malloc(sizeof(int)))) 
    { 
    printf("Unsuccessful malloc!/ n"); 
     return 1; 
    } 

    printf("Enter any number:"); 
    scanf("%d", &number); 
    printf("%d", number); 

    secondFunc(number); 
} 

    void secondFunc(int* number) 
    { 
     int i = 0; 
     int* numbersArr = (int*)malloc(sizeof(int) * (*number)); 
     // check 
     if (!(numbersArr = (int*)malloc(sizeof(int)))) 
     { 
      printf("Unsuccessful malloc!/ n"); 
      return 1; 
      } 
      if (numbersArr) 
      { 
      for (i = 0; i < numbersArr + 1; i++) 
      { 
      scanf("%d", number); 
      } 
      } 



     } 
+0

'我看到一個錯誤' - 好嗎?什麼錯誤?什麼線?編譯。鏈接或運行時間? –

+0

對不起,我認爲運行時錯誤。 line:int * numbersArr =(int *)malloc(sizeof(int)*(* number)); – Skittles

+0

無論如何它被銷燬了:'scanf(「%d」,&number);' –

回答

0

您的代碼中有幾個錯誤。

第一張:您正在創建一個指針並在其中分配內存FirstFunc()。要輸入它不使用&數

scanf("%d", number); 
printf("%d", *number); 

二:secondFunc() numbersArr是一個數組,你不能把循環它numberArr + 1,而是應該

for (i = 0; i < *number; i++) { 
    scanf("%d", &numbersArr[i]); 
} 

要查看正在運行的演示,請訪問此link

+0

非常感謝! – Skittles

0

該行是錯誤的。如果使用:

int* numbersArr = (int*)malloc(sizeof(int) * (*number)); 

編譯器不會喜歡它。嘗試添加另一個變量int以獲取該數字指向的int值。這應該工作:

int size = *number; 
int* numbersArr = (int*)malloc(sizeof(int) * size); 
+0

謝謝,但我需要使用變量brofre。無論如何都不可能使用它? :( – Skittles

+0

也許這個代碼中最好的是將數字作爲int,而不是作爲指針,這將更容易處理,你只是弄亂了指針,並且只留下少量內存,另外,我認爲你是在檢查分配是否成功時分配相同的數組兩次。 – Sia