以下是代码段:
char *b = NULL;
b = new char[5];
if(b != NULL) {
printf("b=%p\n",b);
sprintf(b, "helloPLS...123456789123456789");
printf("b = %s\n", b);
}
output : b = helloPLS...123456789123456789
如果只分配了5个字节,那么为什么所有" helloPLS ... 123456789123456789"字符串被添加到5字节的内存中?
我的程序完美无缺。
答案 0 :(得分:4)
您正在写过您分配的内存的结尾。 C标准清楚地说明了这种情况下的行为是不确定的。
未定义的行为并不意味着“总是崩溃”。这意味着它似乎可行。这意味着您的C运行时环境的实现是在其所需的任何事情的权利范围内,并且仍然符合标准。
未定义的行为是您应该仔细注意的,正是因为您的程序可能“完全正常”,直到它不会。