在free()之前分配值

时间:2015-08-06 09:38:06

标签: 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* abc = "testing";
     val_ptr->str = strdup(abc);
  }

抛出错误。有人可以就此提出建议吗?

1 个答案:

答案 0 :(得分:0)

Val应该是一个看起来像这样的结构

Dim i As Integer

For i =3 to 21 step 6  
Output.Sheets("Table6.1").Range(Cells(i,2), Cells(4,i+5)).Copy
Table.Sheets("Sheet1").Range(... ?? what to put there).PasteSpecial xlValues

如果vl == NULL,则表示它没有指向任何内容......因此您无法访问它。 这就是你断错的原因。

你必须使用malloc分配你需要的内存(我想你刚刚学习了指针和malloc)。

typedef struct s_val
{
  char *str;
  int id;
}               val;

之后,你必须分配所有str指针,如果你愿意,你可以使用strdup,但我认为训练使用malloc应该是一个好主意(重新编译strdup应该是一个很好的练习开始;))。< / p>

我让你考虑for循环的停止条件。

我不会忘记,你必须在施加for循环后释放vl!