簡體   English   中英

分段錯誤訪問結構

[英]Segmentation Fault accessing struct

我不是 C 開發人員,但是我繼承了一些需要編譯的糟糕 C 代碼。 代碼可以編譯,但是當代碼訪問結構的成員時似乎會遇到分段錯誤。 我已經簡化了下面的代碼,這就是導致段錯誤的原因,我不確定為什么,請幫助:)。

typedef struct FOO {

   unsigned int  amount;

}FOO;

int main()
{
    FOO *foo1;
    FOO *foo2;

    unsigned int zero = 0;
    foo1->amount = zero;
    foo2->amount = zero;

    printf("\n1. amount: %u\n", foo1->amount);
    printf("2. amount: %u\n", foo2->amount);

    return 0;
}

重要的是要記住,在 C 中有指針時,如果要使用它們,它們必須指向已分配的 memory。 換句話說:

int main()
{
    FOO *foo1 = calloc(1, sizeof(FOO));
    FOO *foo2 = calloc(1, sizeof(FOO));

    // Technically unnecessary since calloc() will zero by default
    unsigned int zero = 0;
    foo1->amount = zero;
    foo2->amount = zero;

    // ...
    return 0;
}

盡管具有x1x2等形式的變量是一種反模式。 而是使用 arrays:

int main()
{
    const int N = 2;
    FOO *foo = calloc(N, sizeof(FOO));

    // You can access in the range 0..(N-1) where N=2 above
    foo[0]->amount = ...;
    foo[1]->amount = ...;

    // Allows very easy iteration with for
    for (int i = 0; i < N; ++i) {
      foo[i]->amount = ...;
    }

    // ...
    return 0;
}

當你考慮結構化數據而不是代碼時,你可以讓你的代碼為你做更多的工作。

暫無
暫無

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

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