我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.
这是否特定于编译器使用?
对于这个,malloc/new和free/delete的工作方式是否相同?
它是特定于平台的吗?
它会出现在其他操作系统上,例如Linux或VxWorks吗?
我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.
你能举一个关于这个初始化如何有用的实际例子吗?
我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.
这有多便携?
我一直在VS2012教自己C++,并且遇到了一些真正让我摸不着头脑的东西.当创建一个对象并在另一个对象中添加对它的引用时,该对象似乎被破坏或者某些东西.它不是 null(空指针检查的每个组合我可以确认这一点),但其内容很时髦并且试图访问其中一个成员导致"0xC0000005:访问冲突读取位置0xCCCCCCE8".

我的程序的要点是我有一个Tile对象的2D矢量,每个对象都可以引用一个站点.当我在具有网站的tile的draw()函数中时,它将尝试以其文明所属的颜色绘制该网站.
世界一代:
std::vector<std::vector<Tile>> world;
// ... vector is sized ...
// Populate world with tiles
for (int h=0; h<height; h++) {
for (int w=0; w<width; w++) {
Tile t(PLAINS);
world[h][w] = t;
}
}
Run Code Online (Sandbox Code Playgroud)
创建文明时,会为它们创建一个简单的大写网站,并将其引用放在指定x,y的图块中:
void Game::createCivilisation(std::string name, sf::Color colour, int x, int y) {
// Create the civ
Civilisation civ(name, colour);
// Create their capital and link it up
Site capital("Capital", year, &civ); // when I comment these five lines out
civ.capital = &capital; // the …Run Code Online (Sandbox Code Playgroud)