Realloc没有扩展我的阵列

时间:2012-06-24 16:43:25

标签: expand realloc

我在以非常基本的方式实现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,temp指针和这种性质的东西都是调试的,而不是预期功能的一部分。让我感到困惑的是realloc(ret, newsize);ret[i] = booking[i]

基本上我确定预订包含一个以NULL结尾的结构表,并且我试图将具有特定值设置为1(付费)的结构表带到新表上,这就是我的主要内容()试图从这个函数中获取......那么我哪里出错?

3 个答案:

答案 0 :(得分:2)

我认为这里的问题是你的sizeof(ptr)只返回指针的大小,这取决于你的架构(你说4,这意味着你正在运行一个32位系统)。

如果动态分配内存,则必须自己跟踪其大小。

答案 1 :(得分:0)

因为sizeof(ptr)返回指针的大小,而不是分配的大小

答案 2 :(得分:0)

是的,sizeof(ptr)是一个常数。正如另一个答案所说,取决于架构。在32位架构上它将是4,在64位架构上它将是8.如果您需要更多帮助来解决这个问题,那么这个homework help网站对您来说非常棒。

祝你好运。