当我运行下面的代码,我得到了给定输出。
#include <stdio.h> /* printf */
#include <stdlib.h> /* malloc, realloc */
int main()
{
char* characters = (char *) malloc(10 * sizeof(char));
printf("Before: characters at %p, size=%lu\n", (void *) characters, sizeof(characters) / sizeof(characters[0]));
char* temp = (char *) realloc(characters, 100);
if (temp)
{
printf("After realloc, characters size = %lu, temp size = %lu\n", sizeof(characters) / sizeof(characters[0]), sizeof(temp) / sizeof(temp[0]));
printf("After realloc, nums at %p, temp at %p\n", (void *) characters, (void *) temp);
//characters = temp;
free(temp);
}
free(characters);
}
/* Output:
Before: characters at 0x107b00900, size=8
After realloc, characters size = 8, temp size = 8
After realloc, nums at 0x107b00900, temp at 0x107b00910
test(3556) malloc: *** error for object 0x107b00900: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
*/
我试图找出是什么故障。 我认为的malloc留出空间,连续十个字符,并给了我一个指针数组的第一个元素,我存储在该指针characters
。 然后,我打印的大小characters
,我希望10,但我得到8.这是第一奇怪的事情。 然后,我问的realloc找到堆,其已连续100个字符空间的新点和返回一个指向我的第一点。 我把这个指针到温度。 当我打印temp
的大小,我得到8(再次),即使我想到100。当我打印的指针characters
和temp
,我得到的堆两个不同的位置。 通常情况下,我会然后重新分配characters
指针指向任何temp
指向。 然后我试图释放我的指针,它告诉我,现在还不能自由0x107b00900
,确切位置characters
是,因为在这一点上的目的不malloc
编辑; 然而,我malloc
空间characters
。 这究竟是为什么? 我误解的功能malloc
, realloc
, sizeof
,还是其他什么东西? 谢谢您的帮助。