2013-07-24 130 views
1

所以今天的練習是創建一個從0到n的函數initialize an array of intfill itC指針和malloc混淆EXC_BAD_ACCESS

我寫了這個:Initialize array in function 然後我的函數改爲:

void  function(int **array, int max) 
{ 
    int *ptr; // Create pointer 
    int i = 0; 
    ptr = (int *) malloc((max + 1) * sizeof(int)); // Changed to malloc to the fresh ptr 
    *array = ptr; // assign the ptr 
    while (i++ < max) 
    { 
     ptr[i - 1] = i - 1; // Use the ptr instead of *array and now it works 
    } 
} 

void  function(int **array, int max) 
{ 
    int i = 0; 
    *array = (int *) malloc((max + 1) * sizeof(int)); 
    while (i++ < max) 
    { 
     *array[i - 1] = i - 1; // And get EXC_BAD_ACCESS here after i = 2 
    } 
} 

EXC_BAD_ACCESS我越來越瘋狂,我決定SO上搜索,發現這個問題了幾個小時後,

現在它可以工作!但是它不夠用,我真的很想知道爲什麼我的第一種方法不起作用!對我來說他們看起來一樣!

PS:萬一這是主要的使用:

int main() { 
    int *ptr = NULL; 
    function(&ptr, 9); 
    while (*ptr++) { 
     printf("%d", *(ptr - 1)); 
    } 
} 
+0

請標記爲已回答 –

+0

我還不能!不要擔心我會盡快做到這一點:9更多分鐘 – ItsASecret

+0

我的不好!...我很抱歉! –

回答

7

你有錯誤的優先級,

*array[i - 1] = i - 1; 

應該

(*array)[i - 1] = i - 1; 

如果沒有括號,則訪問

*(array[i-1]) 

array[i-1][0],未分配給i > 1

+1

好吧,我永遠不會發現,非常感謝你! – ItsASecret