c++ - 使用 malloc 和 void 指针复制临时结构

标签 c++ c pointers embedded avr

我有以下函数,它被调用作为嵌入式 AVR 时钟上程序模块的开始。我想从将返回 date_time 结构的时钟对象中获取值,并将其复制到我从堆中分配的空间中。

void time_set_mode_start(Display *display, volatile Controls *controls,
                         volatile TimeKeeper *clock, void *data) {

    DEBUG_LED_PORT |= _BV(DEBUG_LED);
    data = malloc(sizeof(date_time));
}

从 clock->getTime() 返回的值获取数据到数据指针的最佳方法是什么?

最佳答案

一种方法是使用 memcpy .具体来说,您可能需要 memcpy(data, clock->getTime(), sizeof(date_time))

另一种方法——可能更好,现在我想到了——是使用普通赋值:

*((date_time*)data) = *(clock->getTime());

这会将 data 视为 date_time *,并为其指向的 date_time 对象分配一个值。

(注意:在上面的两个代码片段中,我假设 clock->getTime() 返回一个 date_time *。这是正确的吗?)

顺便指出,data = malloc(sizeof(date_time)); 将完全替换传入的原始 void * data。你的调用者永远不会看到 data 现在指向的内存位置,因为指针是按值传递的。

关于c++ - 使用 malloc 和 void 指针复制临时结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8221347/

相关文章:

c - task_struct 的struct 中的pwd 和root 有什么区别?

c++ - C结构指针解引用速度

c++ - 编码 PHP 代码浏览器 : is Bison/Flex a choice?

c++ - 凹面 GL_POLYGON 不着色?

c++ - 条件语句与 std::atomic<T> 的基本用法

c - 为什么我的缓冲区存储在堆栈的两个位置?

c - 为什么此 C 代码片段中的 NULL 取消引用不会导致未定义的行为

c - C 有通用的 "pointer to a pointer"类型吗?

c++ - 无法使用非成员开始和结束函数编写基于范围的内容

c++ - winapi 函数的函数指针 (stdcall/cdecl)