相关疑难解决方法(0)

C中数组的最大大小是多少?

我知道硬件将限制程序执行期间分配的内存量.但是,我的问题是不考虑硬件.假设内存量没有限制,那么阵列没有限制吗?

c arrays

45
推荐指数
4
解决办法
12万
查看次数

calloc()总共可以分配超过SIZE_MAX吗?

在最近的一次代码审查中,有人声称

在选择系统上,calloc()可以分配超过SIZE_MAX总字节数,但是malloc()有限.

我的主张是错误的,因为calloc()为一个对象数组创建了空间 - 作为一个数组,它本身就是一个对象.没有任何物体的尺寸可以大于SIZE_MAX.

那么我们哪个是正确的?在地址空间大于范围的(可能是假设的)系统上size_t,calloc()当使用产品大于SIZE_MAX?的参数调用时,是否允许成功?

为了使它更具体:以下程序是否会以非零状态退出?

#include <stdint.h>
#include <stdlib.h>

int main()
{
     return calloc(SIZE_MAX, 2) != NULL;
}
Run Code Online (Sandbox Code Playgroud)

c language-lawyer

30
推荐指数
2
解决办法
2306
查看次数

关于sizeof溢出size_t的C标准

这是未定义的行为吗?标准的相关部分并没有多说。

size_t n = SIZE_MAX / sizeof(double) + 1;
size_t m = sizeof(double[n]);
Run Code Online (Sandbox Code Playgroud)

c sizeof language-lawyer variable-length-array

9
推荐指数
1
解决办法
144
查看次数

在 C++ 中获取数据类型字节数的安全方法

我正在使用 C++11 及更高版本,我在问自己是否可以安全地获取数据类型所需的字节数,例如std::uint16_t发送长度不可知的协议。更精确的调用是否安全,sizeof(std::uint16_t)我可以假设这总是 2 吗?怎么样std::int16_t?

c++ c++11 uint16

1
推荐指数
1
解决办法
128
查看次数