如果我使用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/