簡體   English   中英

動態數組(C)中的段故障

[英]seg fault in dynamic array (C)

為什么我得到*a[1]=1; 即使我已經使用malloc在堆上為其分配了空間?

void d(int **a, int count){
    *a = malloc(sizeof(int)*count);
    *a[1]=1; 
}

int main(){
    int count =10;
    int *a;
    d(&a, count);
}

*a[1] = 1; 可能沒有按照您的想法去做。 由於索引括號的優先級高於取消引用的優先級,因此您可以將其視為將a視為指向整數的指針的數組,並在取消引用以獲取其指向的整數之前嘗試訪問它的第二個元素,而不是指向整數數組的指針。 由於不是這種情況,因此存在段錯誤,因為可能有一些錯誤的地址在該位置被取消引用。

但是,如果將其更改為(*a)[1] = 1; ,該指針首先被取消引用,並且您分配給它的內存被正確索引。

根據運算符優先級規則 ,您的賦值操作*a[1]=1等效於*(a[1])=1 如果您打算取消引用a第一, 然后在索引1訪問元素,你應該包括括號,使你的意圖明顯: (*a)[1]=1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM