在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/