2017-05-23 82 views
-1

我寫了下面的代碼,但是我得到一個崩潰(沒有警告或錯誤),不知道原因:這個C程序爲什麼會崩潰?

const int N = 1000; 

int main(){ 
    int *pI = calloc(N,sizeof(int)); 
    for (int i=0;i<N;i++) { 
     *(pI++) = (i+1); 
    } 
    free(pI); 

    return EXIT_SUCCESS; 
} 

我很感謝任何意見!

+4

提示:當您的程序崩潰時,請使用調試器進行調查。或者至少:提供打印報告,告訴你**你究竟在哪裏**正好崩潰。 – GhostCat

+4

您修改'pI',所以您不能調用'free(pI)',因爲它不再是指向有效分配的指針。 –

回答

4

您還沒有釋放從calloc()接收到的原始指針:

free(pI); 

您已經修改包含在該指針的值:

*(pI++) = (i+1); 

做,而不是:

int *p = calloc(N,sizeof(int)); 
int *pI = p; 
// ... 
free(p); 

也就是說,保存從calloc()返回的值,然後是pa當你不再需要分配的內存時,將它連接到free()

+0

感謝您的澄清和您的替代解決方案! – Fullbright