gpt4 book ai didi

使用 malloc() 时数据大小的兼容性

转载 作者:行者123 更新时间:2023-11-30 18:29:51 25 4
gpt4 key购买 nike

我最近研究了C中的malloc(),其声明如下:

void *malloc(size_t size)

其中 size_t 是无符号整数,size 定义编号。要保留的字节数。问题是在我的系统上 float 值占用 4 字节内存。因此,如果我使用 2 字节的 malloc 来创建内存指针(浮点类型),

float *p;  
p = (float *)malloc(2);

那为什么没有报错呢?因为我认为 float 据需要 4 个字节,所以如果我只向它发出 2 个字节,那么可能会导致一些数据丢失。

还是我对 malloc() 的理解不正确?

最佳答案

在您给出的示例中,如果您只为 float * 分配 2 个字节,然后尝试通过取消引用指针来写入该位置,那么您将写入尚未写入的内存已分配。这导致 undefined behavior 。这意味着它可能会工作,可能会核心转储,或者可能会以不可预测的方式运行。

如果你想为一个或多个 float 分配内存,你可以这样做:

// allocates space for an array of 5 floats
// don't cast the result of malloc
int arrayLen = 5;
float *f = malloc(sizeof(float) * arrayLen);

关于使用 malloc() 时数据大小的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com