gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:46 24 4
gpt4 key购买 nike

那么 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来跟踪他分配的内存。

关于c - realloc 如何增加内存块的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35455127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com