C 在free()之前赋值

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

在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* 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);