我在以非常基本的方式实现 realloc 时遇到了麻烦。
我正在尝试扩展 **ret 处的内存区域,它指向一个结构数组,其中包含ret = realloc(ret, newsize);
并基于我的调试字符串我知道newsize 在循环过程中正确增加(从原始大小 4到 8 到 12 等),但是当我这样做时,sizeof(ptr)
它仍然返回原始大小 4,并且找不到我试图放入新分配空间的东西(我想我已经把它缩小到realloc() 这就是为什么我要像这样格式化问题)
如果问题对您来说不是很明显,我可以完整地发布该功能,我只是尽量不要过多地“欺骗”我的作业(无论如何,代码现在有点乱,大量使用 printf () 用于调试)。
[编辑] 好的,所以根据你的回答,我在调试代码时失败了,所以我想我会发布整个函数,这样你就可以告诉我更多关于我做错了什么的信息。
(您可以忽略 printf(),因为其中大部分是调试,甚至无法正常工作)
Booking **bookingSelectPaid(Booking **booking) {
Booking **ret = malloc(sizeof(Booking*));
printf("Initial address of ret = %p\n", ret);
size_t i = 0;
int numOfPaid = 0;
while (booking[i] != NULL)
{
if (booking[i]->paid == 1)
{
printf("Paying customer! sizeof(Booking*) = %d\n", (int)sizeof(Booking*));
++numOfPaid;
size_t newsize = sizeof(Booking*) * (numOfPaid + 1);
printf("Newsize = %d\n", (int)newsize);
Booking **temp = realloc(NULL, (size_t)newsize);
if (temp != NULL)
printf("Expansion success! => %p sizeof(new pointer) = %d ret = %p\n", temp, (int)sizeof(temp), ret);
ret = realloc(ret, newsize);
ret[i] = booking[i];
ret[i+1] = NULL;
}
++i;
printf("Sizeof(ret) = %d numOfPaid = %d\n", (int)sizeof(ret), numOfPaid);
}
return ret; }
[EDIT2] --> http://pastebin.com/xjzUBmPg
[EDIT3] 为了清楚起见,printf、临时指针和这种性质的东西是调试的,而不是预期功能的一部分。令我困惑的那条线要么是realloc(ret, newsize);
要么ret[i] = booking[i]
基本上我确定预订包含一个以NULL结尾的结构表,并且我试图将具有特定值设置为1(付费)的结构带到新表中,这就是我的main()是试图从这个函数中获取......那么我哪里出错了?