在C中顺序分配内存

时间:2013-06-12 11:34:18

标签: c memory malloc

我想测试malloc()以查看分配到同一地址两次是否会增加内存,或者只是替换它:int *ptr = malloc(sizeof(int)); ptr = malloc(2*sizeof(int));
这个内存是3个整数还是仅仅是2?
当我测试可以容纳多少个整数时,我得到大约200个,之后我在运行时遇到错误。
有人可以解释一下内存分配的随机性吗?

3 个答案:

答案 0 :(得分:2)

假设内存可用,

malloc()总是会分配一个新的内存块,其大小与您请求的大小相同。它返回一个指向它分配的内存的第一个字节的指针,以便您可以使用它。当你进行第二次malloc()调用时,它会覆盖指向你在第一次调用时分配的内存的指针,因此你不能再访问它了 - 但它仍然存在,它仍然分配给你。这通常称为内存泄漏,因为您的进程已占用内存,然后在不再使用它的情况下不会将内存返回。

所以在你的第二次调用之后,你已经分配了足够的内存来存储三个整数,分别在两个独立的块中,第一个就无法访问,因为你没有指针了。

内存分配没有随机性。

我不确定为什么在达到200 ints时会遇到运行时错误,除非你的进程有很大的内存可用性。它有助于了解您实际获得的错误。

答案 1 :(得分:1)

  

这个记忆是3个整数还是2个?

ptr将指向两个int的内存,当您重新分配给ptr时,之前的内存位置现已丢失并且内存已泄露。

答案 2 :(得分:0)

malloc只返回指向已分配内存的void指针。2*sizeof(int)将分配2 * sizeof(int)bytes表示两个整数的内存。 最初你给了一个整数的内存,然后又在同一个指针上为你分配了两个整数的内存。所以最后它将指向两个整数大小的空间。