【发布时间】:2012-06-24 16:43:25
【问题描述】:
我在以非常基本的方式实现 realloc 时遇到了麻烦。
我正在尝试扩展 **ret 处的内存区域,它指向一个结构数组
使用ret = realloc(ret, newsize); 并根据我的调试字符串,我知道 newsize 在循环过程中正确增加(从原始大小4 到8 到12 等),但是当我这样做时@ 987654323@ 它仍然返回原始大小 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] 的那一行
基本上,我确定 booking 包含一个以 NULL 结尾的结构表,我正在尝试将特定值设置为 1(付费)的结构表带到新表中,这是我的主要内容() 正试图从这个函数中获取......那么我哪里出错了?
【问题讨论】:
-
这里的问题到底是什么? (我在任何地方都没有看到问号......)
-
我想问题是:“我做错了什么?”基本上,我已经分配了 '*ptr = malloc(sizeof(my_structure))' 而不知道我的数组中有多少结构实例,然后基于循环,我正在递增一个大小变量并在 'ptr = realloc(ptr, newsize)' 中使用它,但我无法将更多结构放入数组中......我可以发布整个代码,即使我有课程失败的风险,如果我太模棱两可了,哈哈。
-
@user1478361 :下次,使用“代码示例”代替“块引用”(在编辑工具栏中)。我现在为你修好了。