realloc 如何增加内存块的大小?

How does realloc work regarding increasing size of memory blocks?

那么 realloc 如何(以及是否)增加此循环中指向的内存。

char* buffer = malloc(sizeof(char));
ssize_t size = 0;

while(true)
{   
    //increment size;
    size++;

    // increment buffer_inc memory size by size (one byte at a time)
    buffer = realloc(buffer, size);
    ......

当我 运行 这个时,我得到我的初始 sizeof(buffer)8 并且在循环之后,我的大小仍然是 8 不应该是 9

奇怪的是,即使我这样做 buffer = realloc(buffer, size + sizeof(char); 我仍然得到我在 sizeof(buffer) 上的值(在循环之后)是 8 我是否遗漏了一些关于 realloc 如何工作的东西?在我的理解中,它分配了更多的内存,size_t size(作为第二个参数传递)用于 void* ptr(作为第一个参数)传递的内存。

我是不是误解了 realloc 的工作原理?

问:我是否误解了 realloc 的工作原理?

答:没有,但是你误解了你在打印什么!


您正在打印 指针的大小

So, for a 32bit computer, the pointer size can be 4 bytes; 64bit computers can have 8 bytes. Or, a 64bit computer running a 32bit OS will have 4 bytes. Still, under a specific architecture, all types of pointers (void*, int*, char*, long* etc) will have same size (except function pointers).

检查这个例子:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
        char* buf1 = malloc(sizeof(char));
        printf("buf1 = %zu\n", sizeof(buf1));
        char* buf2 = malloc(1000 * sizeof(char));
        printf("buf2 = %zu\n", sizeof(buf2));
        return 0;
}

输出:

gsamaras@gsamaras:~/Desktop$ ./a.out 
buf1 = 8
buf2 = 8

您无法打印分配了多少内存。 程序员有责任 跟踪他分配的内存,方法是保留一个额外的变量,在您的示例中 size

你没有误会realloc。你误会了sizeof.

sizeof(buffer) 是指针的大小(对你来说似乎是 8),而不是它指向的缓冲区的大小。你必须自己跟踪分配的大小。