我最近发现 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/