void realloc(sizeof(char)100);
假设您的意思是调用标准 realloc() 函数(而不是自定义 realloc() 的声明)并且您想要调整内存大小,那么这段代码在三点上是错误的。
1.
realloc() 需要一个指向由内存管理分配的内存并且尚未作为第一个参数释放的内存的指针。
这是标准realloc() 函数的原型/声明:
void *realloc( void *ptr, size_t new_size );
您的realloc() 调用省略了这个指针参数。
2.
当你想调用一个函数时,不要指定返回类型(这里是void *)。这样,您就可以尝试对函数 realloc() 进行新声明,而不是调用。
如果你试图在这里做一些投射,这也是错误的。对于隐式转换,您需要用括号将要转换的类型括起来,例如 (void *)。
请注意,在这两种情况下,演员表都是多余的。通过查看返回类型的转换,请查看:
3.
在 size 参数中,您需要在 sizeof(char) 和 100 之间使用 * 运算符。
用途:
realloc( ptr, sizeof(char) * 100 );
请注意,您还应该始终检查内存管理函数的返回值是否发生错误:
char * ptr2 = realloc( ptr1, sizeof(char) * 100);
if ( ptr2 == NULL )
{
fputs("Error at resizing the allocated memory!\n", stderr);
// error routine.
}
你总是应该为malloc()做同样的事情:
char * ptr1 = malloc( sizeof(char) * 50);
if ( ptr1 == NULL )
{
fputs("Error at memory allocation!\n", stderr);
// error routine.
}
进阶课(此时不需要理解):
请注意,在realloc() 的情况下,我使用不同的指针来捕获realloc() 的返回值。
这是因为realloc() 可能会或可能不会返回作为参数传递的相同指针。
一个不幸的常见但不好的做法是通过realloc()的返回值重新分配作为第一个参数传递的指针。
这是危险的,因为如果realloc() 分配了另一个“替换”内存但没有先擦除,那么对首先分配的内存的引用可能会丢失。
相关: