【问题标题】:pointer being realloc'd was not allocated [closed]未分配重新分配的指针[关闭]
【发布时间】:2012-10-26 15:09:49
【问题描述】:
#include <stdio.h>
#include "stdlib.h"

int main(int argc, const char * argv[])
{
    int i,j;
    char takimlar[4][8]= { "TAKIM A ","TAKIM B","TAKIM C","TAKIM D"};
    char *var = malloc(sizeof(char)*1);
    int sonuclar[4][4] = {
        {0,3,4,2},
        {1,2,3,1},
        {2,3,2,3},
        {0,2,1,4}
    };

    for (i=0; i<4; i++) {
        if (sonuclar[i][2]>sonuclar[i][3]) {
            var = realloc(var,8);
            for (j=0; j<8; j++) {
                var += takimlar[i][0];
            }
        }
        else if(sonuclar[i][2]<sonuclar[i][3]){
            var = realloc(var,8);
            for (j=0; j<8; j++) {
                var += takimlar[i][1];
            }
        }
    }
    printf("%s",var);

    return 0;
}

我想为变量动态分配内存,然后我想使用 realloc 函数分配更多内存。当我运行这个程序时,我得到了这个错误:

对象 0x100100c17 的错误:未分配重新分配的指针。 在 malloc_error_break 中设置断点进行调试

当我查看 malloc.c 文件时,我看到了这些行:

zone = find_registered_zone(old_ptr, &old_size);
    if (!zone) {
        malloc_printf("error for object %p: pointer being realloc'd was not allocated.\n"
        "set a breakpoint in malloc_error_break to debug\n", old_ptr);
        malloc_error_break();

我做错了什么?

【问题讨论】:

  • 我们可以看看你的完整源代码吗?您显示的代码是正确的。
  • malloc 最初是否为您返回了有效的内存块? realloc 无论如何都应该工作,但我似乎记得这有点依赖于实现。
  • 您不太可能向我们提供相关代码。做一个小的、独立的、完整的例子。
  • 例如看here

标签: c pointers malloc realloc


【解决方案1】:

这一行正在递增指针var

var += takimlar[i][0];

在循环的后续迭代中,当var 传递给realloc() 时,它不是realloc()malloc() 返回的值。它看起来好像代码正试图将char 附加到char*,但这并不是实现此目的的方法。

【讨论】:

    【解决方案2】:
    var += takimlar[i][0];
    

    varchar*,因此您正在向地址添加一个字符。我不确定这是你想要做的。然后,当您调用realloc 时,指针不再等于malloc 返回的地址。因此你有一个运行时错误。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 2016-01-08
      相关资源
      最近更新 更多