Calloc()、结构和 C

标签 c struct calloc

所以我是 C 的新手,我创建了一些简单的程序来帮助我掌握一些东西。

假设我有一个结构如下:

typedef struct {
   char* field;
} something;

我为其中的 10 个动态分配空间,如下所示:

something* stuff = calloc(10, sizeof(something));

假设我想删除这些内容之一。这样做是否有意义:

free(&stuff[4]);

或者只有当我将所有这些指针都指向某物而不是某物的连续 block 时,这才有意义吗?

如果我这样做并且成功了,将会:

stuff[4] = malloc(sizeof(something))

那么我需要向该索引重新添加“某物”吗?

或者,一般来说,我们是否通常将此类结构处理为包含指向结构的指针的内存块,而不是结构本身?

谢谢。

最佳答案

规则很简单。您可以而且应该准确地释放您分配的资源。也就是说,您必须只传递指向 free() 的指针,您收到它作为 malloc/calloc/realloc< 的返回值 等*,或空指针。 没有其他内容可以传递给free()

因此,您可以释放整个数组,也可以什么都不释放。

(另请注意,“从中间释放单个元素”将完全没有意义,因为您无法明智地迭代这样一个“神圣”数组。)如果您想释放一些内存,请分配一个 < em>新的范围,复制所需的元素并释放原始数组。

*) 一些准标准函数可能间接返回动态分配的内存,您必须释放这些内存;检查文档。一些示例是 strdup、GNU 的 scanf 和 GCC 的 abi::__cxa_demangle。)

关于Calloc()、结构和 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17415330/

相关文章:

c++ - 将 Lua 变量传递给 C

c++ - 将 iostream 与 stdio 同步

c - 读/写结构到套接字

c - 使用空字符值的 calloc 字符数组的长度?

c - 双字段的 calloc() 是否总是计算为 0.0?

c - 正确使用 realloc()

c - 为了防止段错误,atexit() 函数应该放在哪里?

c - 在结构中设置数组值在结构中设置不同的字段

C : struct to json string

c# - 如果底层实现是结构,接口(interface)类型的变量是否充当值类型?