[英]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;
}
盡管具有x1
、 x2
等形式的變量是一種反模式。 而是使用 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.