我的理解是,如果 char *my_word 分配了一个字节的内存 malloc(1),那么从技术上讲,下面的代码将产生越界错误
char *my_word = malloc(1);
my_word[0] = 'y';
my_word[1] = 'e';
my_word[2] = 's';
但是,代码运行得很好并且不会产生任何错误。事实上, printf("%s", my_word) 可以很好地打印该单词。
如果我专门只分配了 1 个字节的内存,为什么不会产生越界错误?
最佳答案
C 没有明确的边界检查。这就是它变得快速的部分原因。但是,当您写入超出分配的内存范围时,您会调用 undefined behavior .
一旦调用未定义的行为,您就无法可靠地预测程序将做什么。它可能会崩溃,可能会输出奇怪的结果,或者(如在本例中)它可能看起来工作正常。此外,进行看似无关的更改(例如添加 printf
调用以进行调试或添加未使用的局部变量)可能会改变未定义行为的表现方式。
仅仅因为程序可能崩溃并不意味着它会崩溃。
关于c - 为什么我的 char 数组没有产生越界错误?我故意分配了不足的内存,但我仍然可以分配更大的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59315624/