我有以下 struct :

struct NumArray {
    size_t size;
    int* data;
};

然后,我编写了这个函数来从一个公共数组构建一个"NumArray":

struct NumArray* CreateNumArray(const int* nums, const size_t size) {
    struct NumArray* numarray = malloc(sizeof(struct NumArray));

    if (numarray == NULL) {
        return NULL;
    }

    numarray->data = malloc(size * sizeof(int));

    if (numarray->data == NULL) {
        free(numarray);
        return NULL;
    }

    numarray->size = size;
    memcpy(numarray->data, nums, size);

    return numarray;
}

但当我测试它时,似乎我复制了错误的信息:

int main(void) {
    int sample[] = { 1, 2, 3, 4 };
    struct NumArray* arr = CreateNumArray(sample, sizeof(sample) / sizeof(sample[0]));

    if (arr == NULL) {
        return 1;
    }

    for (size_t idx = 0; idx < arr->size; ++idx) {
        printf("%d ", arr->data[idx]);
    }
    printf("\n");

    return 0;
}

Output:

1 476 338297168 476

有人能帮我找到错误吗?

注意:我使用的是gcc 11.2.0

推荐答案

而不是

memcpy(numarray->data, nums, size);

一定是这样

memcpy(numarray->data, nums, size * sizeof(int));

C++相关问答推荐

MISIX标准和信号量的语义

通过管道将一个子系统的标准输出发送到另一个子系统的标准输出

自定义变参数函数的C预处置宏和警告 suppress ?

如何在C中使printf不刷新标准输出?

CGO:如何防止在使用CGO在包中包含C头文件时出现多个定义...&q;错误?

如何用c语言修改shadow文件hash部分(编程)?

等同于铁 rust 的纯C语言S未实现!()宏

Cairo STM32MP1 cairo_Surface_WRITE_TO_PNG始终返回CAROLIO_STATUS_WRITE_ERROR

使用%f格式说明符打印整数值

我可以创建适用于不同endian的 colored颜色 struct 吗?

用C++高效解析HTTP请求的方法

计算SIZE_MAX元素的长数组的大小

程序如何解释变量中的值

Matlab/Octave对conv2函数使用哪种方法?

将char*铸造为空**

GCC认为这是一个VLA是对的吗?

无法将字符串文字分配给 C 中的字符数组

根据输入/输出将 C 编译过程分为预处理、编译、汇编和链接步骤

const struct 成员的 typedef 中的灵活数组大小

快速准确计算double的小数指数