C 在free()之前赋值
在C函数中,下面是一段代码:C 在free()之前赋值,c,C,在C函数中,下面是一段代码: val *val_ptr; for (val_ptr = *(val **)vl; val_ptr->id; val_ptr++) free(val_ptr->str); 不知何故,我无法更改这段代码。在此之前,我需要编写代码,将内存分配给val_str->str。我已经编写了以下代码: for (val_ptr = *(val **)vl; val_ptr->id; val_ptr++) { char* ab
val *val_ptr;
for (val_ptr = *(val **)vl; val_ptr->id; val_ptr++)
free(val_ptr->str);
不知何故,我无法更改这段代码。在此之前,我需要编写代码,将内存分配给val_str->str。我已经编写了以下代码:
for (val_ptr = *(val **)vl; val_ptr->id; val_ptr++)
{
char* abc = "testing";
val_ptr->str = strdup(abc);
}
这是投掷错误。有人能对此提出建议吗?Val应该是这样的结构
typedef struct s_val
{
char *str;
int id;
} val;
如果vl==NULL,则表示它不指向任何内容。。。所以你不能用它什么都得不到。
这就是你犯错的原因
您必须使用malloc分配所需的内存(我想您刚刚学习了指针和malloc)
在那之后,您必须分配所有str指针,如果您愿意,您可以使用strdup,但是我认为培训使用malloc应该是一个好主意(重新编码strdup应该是一个很好的开始练习;))
我让你们考虑for循环的停止条件
我不会忘记,你必须在强制循环后释放vl 什么是
vl
?抛出的错误是什么?[新线程0xf7735710(LWP 6134)]程序收到信号SIGSEGV,分段错误。[切换到线程0xf7735710(LWP 6134)]0x00611025,位于/lib/libc.so.6char*vl=NULL的_int_malloc()中;好的,您已经发现了问题,现在可以解决了。您能否确认导致SEG故障的实际上是strdup
?
int number_of_val_i_want;
vl = malloc(sizeof(val) * number_of_val_i_want);