動作しない私はそうのような結果として、複数の間接ポインタを返す関数があります:私は、主な機能で、この結果にクロールするとき、私は、今CでNULLポインタをチェックする
typedef struct {
int id;
char *name;
} user;
user **myfn(int users_count) {
user **a;
a = malloc(sizeof(user) * user_counts);
for(int i = 0 ; i<user_counts ; i++) {
*(a+i) = malloc(sizeof(user));
(*(a+i))->id = 1;
(*(a+i))->name = malloc(sizeof(char) * 25);
strncpy((*(a+i))->name, "Morteza", 25); // just for example
}
return a;
}
を、それすべてのユーザー名が表示されますが、最後にSegmentation fault
エラーが発生します。
int main() {
user **a = myfn(10);
int i = 0;
while((*(a+i)) != NULL) {
printf("ID: %d \t %s\n", (*(a+i))->id, (*(a+i))->name);
i++;
}
}
結果:
ID: 1 Morteza
ID: 2 Morteza
...
...
ID: 10 Morteza
Segmentation fault (core dumped)
while
のcondition
は正常に動作しないのはなぜ?すべての
'a = malloc(sizeof(user)* user_counts);は間違っています。 '* a'は' user'ではなく 'user *'です。 – melpomene
'strncpy'を使わないでください。これまで – melpomene
'*(a + i)'は通常 'a [i]'と書かれています。 – melpomene