【发布时间】:2019-09-19 02:17:18
【问题描述】:
我可以使用 strdup 分配值并使用以下命令打印值:(*test + index)->email 但我不知道如何释放分配给变量 email 的内存。我想过释放test+index,但我想这会导致内存泄漏,对吧?考虑到结构已分配内存,并且其中的每个指针都分配有strdup 的内存。
编辑:
代码大致是这样的:
struct random {
char *email;
} Random;
void function(Random **struct) {
char *temp = calloc(100, sizeof(char));
*struct = calloc(5, sizeof(Random));
for (int i = 0; i < 5; i++) {
scanf("%s", temp);
(*struct + i)->email = strdup(temp); //This works
}
free((*struct + 3)->email); //Gives segmentation fault
}
int main() {
Random *struct;
function(&struct)
}
【问题讨论】:
-
这里有没有省略代码?因为
scanf变为未初始化的temp将是未定义的行为。temp需要是malloced,或者做成一个数组,而不仅仅是一个char*。另外,你在这里使用*struct + i,这是没有意义的,因为没有i变量,也没有randomSize变量。 -
@ShadowRanger 是的,我尝试尽可能简化示例。我忘记了 malloc 部分。 temp 用 calloc 初始化。
-
你为什么要加
i?您将不得不输入足够的代码来重现问题 -
您将需要提供一个实际 minimal reproducible example(确保它可以编译、运行并且与您的完整代码有相同的错误),我们可以'当你把代码砍得这么厉害时,不要只是猜测你还犯了什么错误。
-
C11 Standard - 6.4.1 Keywords,不允许使用
struct作为变量名。