我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.
这是否特定于编译器使用?
对于这个,malloc/new和free/delete的工作方式是否相同?
它是特定于平台的吗?
它会出现在其他操作系统上,例如Linux或VxWorks吗?
我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.
你能举一个关于这个初始化如何有用的实际例子吗?
我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.
这有多便携?
我有以下C代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
}node;
int main()
{
node * n;
printf("\n%d\n",n->a);
n = (node *) malloc ( sizeof( node ));
printf("\n%d\n",n->a);
n->a = 6;
printf("\n%d\n",n->a);
free(n);
printf("\n%d\n",n->a);
n->a = 4;
printf("\n%d\n",n->a);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
获得的输出是:
1314172
0
6
0
4
我的问题是即使在free(n)之后,为什么n-> a = 0,我们如何将它重新分配给任何值,如n-> a = 4?
不自由使n指向的内存块无效吗?