小编Jac*_*lan的帖子

memcpy 将零字节写入 const 变量 - 未定义的行为?

在C和C++中,当要复制的字节数为零时,memcpy进入变量是否是未定义的行为?const

int x = 0;
const int foo = 0;
memcpy( (void *)&foo, &x, 0 );
Run Code Online (Sandbox Code Playgroud)

这个问题并不纯粹是理论上的。我有一个场景,其中memcpy被调用,如果目标指针指向const内存,则大小参数保证为零。所以我想知道是否需要将其作为特殊情况处理。

c c++ constants memcpy language-lawyer

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

分配的内存少于指向数组的指针的指定大小

在 C 中,如果我们只访问分配内存中的元素,那么向数组指针分配内存不足是“合法的”吗?或者这会调用未定义的行为吗?

int (*foo)[ 10 ];                  //Pointer to array of 10 ints
foo = malloc( sizeof( int ) * 5 ); //Under-allocation! 
                                   //Only enough memory for 5 ints
//Now we only ever access (*foo)[ 0 - 4 ]
Run Code Online (Sandbox Code Playgroud)

如果这本身不是未定义的行为,那么访问另一个不相关的对象(其内存地址恰好落在数组未分配部分的地址空间内)是否会导致严格别名冲突?

c malloc language-lawyer pointer-to-array

24
推荐指数
2
解决办法
1563
查看次数

标签 统计

c ×2

language-lawyer ×2

c++ ×1

constants ×1

malloc ×1

memcpy ×1

pointer-to-array ×1