2013-10-22 31 views
3
#include<stdio.h> 
#include<stdlib.h> 
#include<math.h> 
#include<conio.h> 

int main() 
{ 
    int i, *ptr; 
    ptr = func(); 
    for(i=0;i<20;i++) 
    { 
     printf("%d", ptr[i]); 
    } 
    return 0; 
} 

int * func() 
{ 
    int *pointer; 
    pointer = (int*)malloc(sizeof(int)*20); 
    int i; 
    for(i=0;i<20;i++) 
    { 
     pointer[i] = i+1; 
    } 
    return pointer; 
} 

錯誤: 相互矛盾的函數類型。 警告: 賦值使指針從整數沒有投射[默認啓用]C代碼中的編譯時錯誤[從函數返回數組指針]

爲什麼我得到這個錯誤?

+0

你還應該檢查'malloc'返回值爲NULL' – jev

回答

7

因爲您在未先聲明的情況下致電func()。這會導致編譯器假定它將返回int,但隨後您將該整數存儲在一個當然相當可疑的指針中。

修正由上述main()移動func(),所以定義呼叫之前所看到的,或引入main()前原型:

int * func(); 

此外,功能不接受參數應該在C (void),和please don't cast the return value of malloc() in C

+0

哦對。謝謝!! – Naman