ale*_*xis 0 c c++ string malloc
我正在玩一些cpp的基本内容.我是这种语言的新手...所以我警告我的问题可能没有正确制定.我感谢任何帮助.
事情是,在看了www.cplusplus.com/reference/cstdlib/malloc/中的例子之后,我发现了我自己的代码:
#include <stdio.h>
int main (void) {
char *str;
str = (char*) malloc(2);
str[0] ='8';
str[1] ='8';
str[2] ='6';
str[3] ='\0';
printf ("%s\n",str);
}
Run Code Online (Sandbox Code Playgroud)
并编译:
gcc -O0 -pedantic -Wall test2.cpp
Run Code Online (Sandbox Code Playgroud)
(gcc版本4.7.2)
我没有错误和输出886.为什么我没有错误?我没有通过分配空间的边界吗?
我没有得到任何错误,我得到了输出886.为什么没有错误?我没有通过分配空间的边界吗?
在代码正常的情况下...为什么参考中的示例?在另一个(更可能的)案例中......有哪些风险?
谢谢!
您没有收到任何错误,因为C和C++不进行边界检查.你覆盖了你没有使用的内存部分,但你很幸运,这并不重要.相比之下,将一排钉子钉在墙上,你知道那里有钉子.如果你错过了钉子,大多数时候,你只是在石膏上放了一个洞,但是继续做它是很危险的,因为最终,你要打一根电线而不是.