1)为什么我需要释放元素中包含的字符串。我知道当 s 被声明为 char* s = snprintf(s,(size_t),30,"this gets added"); (这是在我的类示例中完成的方式)但是为什么有必要 - 当结构本身被释放时,是否可以释放结构中包含的属性(在本例中为 linkedList 节点)?
您需要释放已分配的任何内存。
char *s = snprintf(s, ...)
做错了。你需要:
char *s = NULL; // Declare memory -- and initialize it to NULL just to be safe.
// This way, using unallocated memory will be easily spotted.
s = malloc(30); // Allocate the memory
if (NULL == s) // Check that it has been allocated.
{
abort();
}
// Use the memory: sprintf into s
snprintf(s, "My name is %s", 30, "John");
// Use the result
printf("%s\n", s);
free(s); // Free the memory
s = NULL; // If you're really paranoid, NULL out its pointer.
// This way, also using no-longer-allocated memory will be spotted.
你也可能会遇到valgrind并发现他是一个固执但有价值的朋友。
2)当我试图释放明确声明的 s 的值时发生了什么
没什么好的 :-) 。内存分配器发现了一个错误,并立即使您的程序崩溃以避免更糟的情况发生。
3)我是否需要以其他方式释放 s 的价值?
如果你已经分配了,是的。看上面。