Tor*_*erg 5 c undefined-behavior
通常访问超出其结尾的数组是C中未定义的行为.例如:
int foo[1];
foo[5] = 1; //Undefined behavior
Run Code Online (Sandbox Code Playgroud)
如果我知道数组末尾之后的内存区域是用malloc还是在堆栈上分配的话,它仍然是未定义的行为吗?这是一个例子:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int len;
int data[1];
} MyStruct;
int main(void)
{
MyStruct *foo = malloc(sizeof(MyStruct) + sizeof(int) * 10);
foo->data[5] = 1;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到在几个地方使用这个模式来制作一个可变长度的结构,它似乎在实践中起作用.这是技术上未定义的行为吗?