首页 > 解决方案 > libmpdec mpd_qncopy 内存分配

问题描述

https://www.bytereef.org/mpdecimal/doc/libmpdec/assign-convert.html

mpd_t *mpd_qncopy(const mpd_t *a);

返回指向 a 的新副本的指针,失败时为 NULL。

“新副本”是什么意思?它在哪里分配新指针而没有任何mpd_context_t给定?

标签: cpointers

解决方案


“新副本”意味着分配内存并复制十进制对象。完整的实现是:

mpd_t *
mpd_qncopy(const mpd_t *a)
{
    mpd_t *result;

    if ((result = mpd_qnew_size(a->len)) == NULL) {
        return NULL;
    }
    memcpy(result->data, a->data, a->len * (sizeof *result->data));
    mpd_copy_flags(result, a);
    result->exp = a->exp;
    result->digits = a->digits;
    result->len = a->len;

    return result;
}

不清楚为什么您认为mpd_context_t需要提供对象,因为没有对小数执行任何操作。


推荐阅读