我有以下代码:
#include <iostream>`
using namespace std;
int main() {
char* data = new char;
cin >> data;
cout << data << endl;
return 1;
}
当我输入26个
char*
作为字符串文字时,它将编译并打印出来。但是,当我将27个作为数据时,它将中止。我想知道为什么。为什么是27?
它有特殊含义吗?
最佳答案
您必须在C ++实现的框架下研究特定的细节。可能是malloc
的实现,依此类推。您的代码写到缓冲区的末尾,根据C ++标准,该缓冲区为UB。要完全了解其行为的原因,您需要知道应该重写的27或28字节中应该存储的内容,而不应该这样做。
最有可能的是,恰好27个恰好是您开始损坏内存分配器用来跟踪已分配和可用块的数据结构的时候。但是,使用UB时,您可能会发现行为并不像它第一次出现时那样一致。作为C ++程序员,您并没有真正“有权”知道这些细节,因为如果您知道这些细节,那么您可能会开始依赖它们,然后它们可能会更改而不会另行通知。
关于c++ - 默认动态内存大小,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11147973/