gpt4 book ai didi

c++ - 如果 Malloc 无法分配 X 字节,我是使用 Realloc 还是再次使用 Malloc? C++

转载 作者:行者123 更新时间:2023-11-28 04:56:40 25 4
gpt4 key购买 nike

我一直在读一本关于 C++ 内存管理的书,它有很多细节并且解释得很好。但是我有一个我一直在研究的程序,它必须处理一些非常大的 vector 或数组。不过我很困惑。我决定尝试分配内存以防万一。

我的问题是,如果我尝试 malloc() 一定数量的数据,然后出现问题。如果我想再次尝试执行 malloc() 并分配更少的数据,我是使用 realloc() 还是使用 malloc() 又是?我认为这听起来像是一个愚蠢的问题,但是因为第一个 malloc() 会失败,它不会根本不会被 malloced 吗......???这意味着您仍然可以在上面使用 malloc() 吗?

那么...我应该使用哪个,还是根本不使用以下任何一种?

BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocArray)
{
allocptr = (BYTE*)malloc(1000000);
}
// program code
free(allocptr);

或者我应该使用 realloc() 来尝试更小的字节数......而不是在第一个 malloc() 失败时再次尝试 malloc()

BYTE *allocptr;
allocptr = (BYTE*)malloc(2500000);
if (!allocptr)
{
allocptr = (BYTE*)realloc(allocptr, 1000000);
}
// program code
free(allocptr);

我问这个问题的原因是,如果第一个 malloc() 未能分配 2,500,000 字节,allocptr 就不会等于 NULL... 如果 allocptr 等于 NULL 就不能'我在上面使用 malloc() 而不是 realloc() 因为我认为 realloc() 不能接受等于的指针空值。

最佳答案

Realoc 更改已分配 block 或内存的大小(或分配一个新 block 或复制旧内容)。例如,当您分配了 5 个字节的内存,后来发现您还需要 5 个字节时,您可以使用它。

在你的例子中,malloc 失败了,你从来没有得到任何内存块开始,所以没有什么可以重新分配的,所以你会使用 malloc.

注意:正如@DavidSchwarz 提到的,您可以使用realloc,但这相当于在第一个参数为NULL 时调用malloc。

关于c++ - 如果 Malloc 无法分配 X 字节,我是使用 Realloc 还是再次使用 Malloc? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46985347/

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