我想测试malloc()
以查看分配到同一地址两次是否会增加内存,或者只是替换它:int *ptr = malloc(sizeof(int)); ptr = malloc(2*sizeof(int));
这个内存是3个整数还是仅仅是2?
当我测试可以容纳多少个整数时,我得到大约200个,之后我在运行时遇到错误。
有人可以解释一下内存分配的随机性吗?
答案 0 :(得分:2)
malloc()
总是会分配一个新的内存块,其大小与您请求的大小相同。它返回一个指向它分配的内存的第一个字节的指针,以便您可以使用它。当你进行第二次malloc()
调用时,它会覆盖指向你在第一次调用时分配的内存的指针,因此你不能再访问它了 - 但它仍然存在,它仍然分配给你。这通常称为内存泄漏,因为您的进程已占用内存,然后在不再使用它的情况下不会将内存返回。
所以在你的第二次调用之后,你已经分配了足够的内存来存储三个整数,分别在两个独立的块中,第一个就无法访问,因为你没有指针了。
内存分配没有随机性。
我不确定为什么在达到200 ints时会遇到运行时错误,除非你的进程有很大的内存可用性。它有助于了解您实际获得的错误。
答案 1 :(得分:1)
这个记忆是3个整数还是2个?
ptr
将指向两个int
的内存,当您重新分配给ptr
时,之前的内存位置现已丢失并且内存已泄露。
答案 2 :(得分:0)
malloc只返回指向已分配内存的void指针。2*sizeof(int)
将分配2 * sizeof(int)bytes
表示两个整数的内存。
最初你给了一个整数的内存,然后又在同一个指针上为你分配了两个整数的内存。所以最后它将指向两个整数大小的空间。