据我所知,
例1

cPtr = (char*)malloc(100);

例2
1 char c = 0;
2 char* cPtr = &c
3 cPtr = (char*)malloc(100);

在示例1中,
malloc创建一个内存空间并返回分配内存的第一个地址块。
所以cPtr在堆内获得任意地址。
在例2的第2行中,cPtr指向c,所以cPtr的地址是c。
此时,当您执行例2的第3行时,
cPtr的价值是什么?
它是否得到了我在示例1中提到的任意内存地址?
或者,它是否保留c的地址并创建空格?

最佳答案

它是否得到了我在示例1中提到的任意内存地址?
对。这一行只是覆盖了先前的值cPtr
或者,它是否保留c的地址并创建空格?
不,它什么都不“保留”。cPtrmalloc()调用的返回值覆盖,该值指向某个内存块,与第一个示例相同。
第二个例子的第1行和第2行本质上是没有操作的。

关于c - 两种内存分配实例的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19278714/

10-13 06:59