相关疑难解决方法(0)

何时以及为什么操作系统会在malloc/free/new/delete上将内存初始化为0xCD,0xDD等?

我知道操作系统有时会使用某些模式(如0xCD和0xDD)初始化内存.我想知道的是何时以及为什么会发生这种情况.

什么时候

这是否特定于编译器使用?

对于这个,malloc/new和free/delete的工作方式是否相同?

它是特定于平台的吗?

它会出现在其他操作系统上,例如Linux或VxWorks吗?

为什么

我的理解是这只发生在Win32调试配置中,它用于检测内存溢出并帮助编译器捕获异常.

你能举一个关于这个初始化如何有用的实际例子吗?

我记得读过一些东西(可能在Code Complete 2中),在分配内存时将内存初始化为已知模式是好的,某些模式会触发Win32中的中断,这将导致调试器中出现异常.

这有多便携?

c c++ memory memory-management

120
推荐指数
3
解决办法
3万
查看次数

如何在C++中初始化动态数组?

如何实现此静态数组初始化的动态等价物:

char c[2] = {};  // Sets all members to '\0';
Run Code Online (Sandbox Code Playgroud)

换句话说,创建一个动态数组,其中所有值都初始化为终止字符:

char* c = new char[length]; // how do i amend this? 
Run Code Online (Sandbox Code Playgroud)

c++ arrays

56
推荐指数
6
解决办法
10万
查看次数

动态分配的char

int main()

{
   char *second= new char("hello");
   char *first="hi";
   char third[]="new";
}
Run Code Online (Sandbox Code Playgroud)

我是c ++的新手,并不真正理解char是如何工作的,为什么第一个产生编译器错误,以及这三种声明方式的差异,以及以特定方式声明它的强度和好处.

谢谢

嗯,正如有人提到第二种形式是只读的,为什么我可以改变它.假设我有以下代码

 int main()

{
   char *second= new char("hello");
   char *first="hi";
   char third[]="new";
   first="world";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码仍会执行,为什么会这样?,如果我想读取输入但不知道字符串的大小,那么哪种形式更好?

c++

2
推荐指数
1
解决办法
2万
查看次数

什么是动态记忆?

可能重复:
动态内存和"普通"内存之间的差异

我正在阅读C++教程,我不明白为什么我需要声明动态内存,这就是教程所说的:

到目前为止,在我们所有的程序中,我们只有我们为变量声明的可用内存,在程序执行之前,所有变量的大小都要在源代码中确定.

然后它说我们必须使用new和delete运算符来使用动态内存.但是,我似乎在声明一个指针时使用动态内存,例如char*p,我没有指定字符数组的长度.事实上,我认为当你使用指针时,你总是使用动态内存.不是吗?我只是没有看到使用new运算符声明变量之间的区别.我真的不明白动态内存是什么.谁能解释一下这个?

c++

-4
推荐指数
1
解决办法
198
查看次数

标签 统计

c++ ×4

arrays ×1

c ×1

memory ×1

memory-management ×1