c - 在 free() 之前赋值

标签 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);
  }

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

最佳答案

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

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

如果 vl == NULL,则意味着它没有指向任何内容...因此您无法用它访问任何内容。 这就是你出现段错误的原因。

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

int number_of_val_i_want;
vl = malloc(sizeof(val) * number_of_val_i_want);

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

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

我没有忘记,你必须在强加的 for 循环之后释放 vl!

关于c - 在 free() 之前赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31852173/

相关文章:

c - 读取文件时出现未知符号

c - 修复 C 中的边界问题

c - 这个递归程序有什么问题

c - atoi() 使程序崩溃

c - 节点,按值传递,C 中奇怪的字符串行为

c - 生成数组中的随机数并计算平均值、最大值、最小值、总和

c - 关于 getchar() 用法的简单问题?

c - 在 c 中标记化

mysql - 将C代码的输出重定向为MySQL服务器的输入

c - 嵌入式 C 中绝对值的有效阈值检查