我的一大段代码有问题,所以我尽可能地减少它,事实上我找到了解决问题的方法,但我几乎可以肯定有更好的解决方案,这就是为什么我寻求帮助。
这是错误的代码:
#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
结构添加
添加结构编号 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
添加
结构 添加结构编号 2 添加
结构
谢谢阅读 :)