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

标签 c arrays pointer-arithmetic

我最近发现 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 - 在 C 中写入超出数组末尾的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40192661/

相关文章:

c - 在动态分配的内存上使用指针算法的未定义行为

c++ - C/C++ 程序是否可以通过读取数组末尾 (UNIX) 来产生段错误?

java - 如何按一定顺序打印 3 个不同字符串数组的元素?

java - 在 Java 中使用 for 循环,是否必须指定 not null?

转换并添加指向不同大小类型的指针

c++ - std::byte 指针应该用于指针运算吗?

c - 尝试使用 execvp 在 C 中执行外部命令(在类似 shell 的程序中)

c - 从 C 文件输入,数据类型

在 C 中更改/转换 xmlChar 的类型

数组中只能有一个元素才能构成子数组吗?