在 C 中写入超出数组末尾的内容

Writing beyond the end of an array in C

我最近发现C可以让我做以下操作:

char* myArray[1];

myArray[0] = malloc(1024 * sizeof(char));
strcpy(myArray[0], "Hello");

myArray[1] = malloc(1024 * sizeof(char));
strcpy(myArray[1], "World");

//repeat ad absurdum

有效地允许我填充 myArray 尽可能多的数据指针,尽管一开始只为一个指针显式请求内存。

为什么允许这样做? 这被认为是好的做法还是会导致不可预见的后果? 在我的理解中,数组的不同索引在内存中彼此相邻分配,并且由于在初始化数组时从未明确请求 myArray[1] 的地址,因此它可能被其他数据占用。

C 是一种非常不安全的语言。你通常可以做任何你想做的事,而且做你做过的事肯定会毁了记忆。通常在简单的程序中您不会注意到效果,但它很快就会变得明显。

简而言之 - 这是允许的,但很危险,不应该这样做。

用c编程时,每行都要检查自己。

C 不会对数组访问进行边界检查,并且尝试读取或写入超出数组末尾的内容会导致未定义的行为。缓冲区溢出是一种常见的恶意软件攻击。