Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中释放结构的字符串成员_C_Free - Fatal编程技术网

在C中释放结构的字符串成员

在C中释放结构的字符串成员,c,free,C,Free,我的结构如下: struct something{ char *string_member; }; 现在我创造了 struct something *s = malloc(sizeof(struct something)); s.string_member = malloc(5); //one way s.string_member = "some thing wrong"; // second way 当我释放s指向的记忆时。在这两种情况下,如何释放分配给string_成员的内存。

我的结构如下:

struct something{
  char *string_member;

};
现在我创造了

struct something *s = malloc(sizeof(struct something));

s.string_member = malloc(5); //one way
s.string_member = "some thing wrong"; // second way

当我释放s指向的记忆时。在这两种情况下,如何释放分配给string_成员的内存。我必须担心第二种情况下的字符串成员吗?

您不能在第二种情况下释放它,并且您无法(可移植地)通过查看指针来区分第一种情况和第二种情况。因此不要这样做,请确保始终使用
malloc
或例如
strdup
分配
string\u成员。这样,您就可以随时
免费
它(一次)


在第一种情况下,调用
free(s.string\u成员)
。在第二种情况下,你不必做任何事情。这是因为字符串不是动态分配的。is所在的位置在加载程序时确定,系统也会对其进行清理

s.string_member = strdup("some thing wrong");  // the other way

...

free(s.string_member);