【发布时间】:2021-11-20 22:23:01
【问题描述】:
我是 C 新手,我很难弄清楚如何将给定 void 指针的值分配给我在结构中的指针,而不会弄乱内存。运行调试程序后,我看到这个函数没有正确清除内存。它缺少一个 free()。
struct data_t{
int datasize;
void *data;
}
struct data_t *data_create2(int size, void *data) {
if(size < 1 || data == NULL)
return NULL;
struct data_t *d = data_create(size); //creates a new element of data_t and reserves the necessary memory
memcpy(d -> data, data, size);
return d;
};
调用此函数后,还有另一个函数 data_destroy 销毁返回的结构,在本例中为 d。
我做错了什么?如果需要更多代码,请询问
【问题讨论】:
-
d->data=data;您正在将分配块的起始地址分配给您的指针。也永远不要在" -> "周围放置空格(错误的形式)如果data尚未分配,那么您可以为此分配永久存储空间,然后memcpy我们需要看看您传递的void *data是如何声明的并且初始化以提供明确的答案。 -
data_create的定义在这里会很有帮助 -
这里没有足够的信息来看看你可能做错了什么。请使用minimal reproducible example 更新您的问题。
-
@DavidC.Rankin
ever put spaces around " -> " (bad form)我做了 30 年,这是我的首选形式。那么大卫,我是一个糟糕的程序员吗? -
本网站的指南要求您在询问与代码相关的问题时提供minimal reproducible example。 MRE 意味着我们可以复制并粘贴到代码编辑器中、编译和运行以重现问题的代码。如果您花一些时间在tour 和阅读help center 页面以了解该网站的工作原理,然后再开始发布,您会发现您在这里的体验会好很多。