我有一段代碼存在問題,所以我儘可能地減少了它,事實上我找到了解決方案來解決我的問題,米幾乎肯定有更好的解決方案,這就是爲什麼我要求幫助。在動態數組結構上使用realloc時發生Segfault錯誤
這裏是不好的代碼:
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a;
}my_struct;
void tab_add(my_struct** tab, int i){
*tab = (my_struct*)realloc(*tab, i+1); // Here's the realloc
printf("Adding struct number %d\n", i);
tab[i]->a = i*8; // Problem here, when accessing tab[i] the second time
printf("Struct added\n");
}
int main(void){
my_struct* tab = NULL;
tab_add(&tab, 0);
tab_add(&tab, 1);
tab_add(&tab, 2);
return 0;
}
的輸出是:
添加結構編號0
STRUCT加入
添加結構數1
zsh的:分段故障./main
現在,這裏是解決該問題的代碼(但它創建了一個無用的變量...):
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int a;
}my_struct;
void tab_add(my_struct** tab, int i){
*tab = (my_struct*)realloc(*tab, i+1);
printf("Adding struct number %d\n", i);
my_struct st; // Useless variable created
st.a = i*8;
(*tab)[i] = st;
printf("Struct added\n");
}
int main(void){
my_struct* tab = NULL;
tab_add(&tab, 0);
tab_add(&tab, 1);
tab_add(&tab, 2);
return 0;
}
它的輸出是正確的:
添加結構數0
結構添加
加入結構數1
STRUCT加入
添加結構數2
STRUCT加入
感謝您的閱讀:)
它的工作原理!謝謝。我真的認爲編譯器正在用(* tab)[x] .x代替tab [x] - > b!它究竟發生了什麼變化? – user1729422
'tab [x] - > b'是'(* tab [x])。b'不是'(* tab)[x] .b' –
好的,謝謝:) – user1729422