如果我使用malloc执行以下操作

HashTableEntry *util = malloc(sizeof(HashTableEntry) * T->capacity);

一切正常。但是,如果我使用realloc
HashTableEntry *util = realloc(util, sizeof(HashTableEntry) * T->capacity);

realloc返回NULL。我还收到gcc的警告,说在使用它之前我还没有初始化util
但是,下面的操作非常好,比如malloc
HashTableEntry *util = NULL;
util = realloc(util, sizeof(HashTableEntry) * T->capacity);

我的问题是为什么?
我所相信的是,在所有情况下,我都在创建一个指针,并为它分配我正在分配的堆内存块的起始地址。我错在什么地方了吗?

最佳答案

一般来说,函数会查看其参数的值并使用这些值来执行某些操作,因此传递特定值而不是随机或未指定的值是很重要的。当您编写HashTableEntry *util = realloc(util, sizeof(HashTableEntry) * T->capacity);时,您还没有告诉编译器在调用util函数时要在realloc变量中放入什么值,所以您可能会得到未定义的行为,这很糟糕。

关于c - 为什么在realloc函数中使用ing指针之前先将其设为NULL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44101697/

10-12 04:17