两个内存分配示例的区别?

时间:2013-10-09 17:24:14

标签: c malloc

据我了解,

示例1

cPtr = (char*)malloc(100);

例2

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

在例1中, malloc创建一个内存空间并返回已分配内存的第一个地址块。 所以cPtr在堆中获取一个任意地址。

在Example2的第2行中,cPtr指向c。所以cPtr的地址为c。

此时,当您执行示例2的第3行时, cPtr的价值是多少? 它是否像Example1中提到的那样得到一个任意的内存地址? 或者,它是否保留c的地址并创建空格?

3 个答案:

答案 0 :(得分:3)

  

它是否像我在例1中提到的那样获得了一个任意的内存地址?

是。该行只会覆盖cPtr的前一个值。

  

或者,它是否保留c的地址并创建空格?

不,它没有“保留”任何东西。 cPtrmalloc()调用的返回值覆盖,该值指向一些内存块,与第一个示例相同。

第二个例子的第1行和第2行基本上都是无操作。

答案 1 :(得分:1)

malloc会返回指针成功initializechange值的值。
初始化发生在Example1中,更改cPtr的值发生在Example2中。
这是两者之间的唯一区别。

答案 2 :(得分:1)

关于cPtr的值,在你的第二个例子中,第3行完全抛弃了第1行和第2行的所有效果。 malloc返回的值只会覆盖cPtr中的上一个值。因此,在第二个示例中,第1行和第2行对代码行为完全没有影响。

换句话说,两个示例都是100%等效的,第二个示例有两行额外的完全无关紧要(“死”)的代码。