C语言 Realloc x86 x86_64



我有一个函数

void *srealloc(void * ptr , int size){
    void *tmp = realloc(ptr , size);
    if(tmp == NULL){
        fprintf(stderr,"realloc of %u bytes failed", size);
        exit(1);
    }
    return tmp;
}

调用这个函数的代码在x86计算机上运行得很好,但是当我在x64计算机上编译和运行相同的代码时,我得到了一个段错误。

这是如何被调用的一个例子是:

line = "Some string";
buffer = (char**) srealloc (buffer,sizeof(buffer)*(++buffer_lines));
buffer[buffer_lines-1] = line;

当在分段故障计算机上调用srealloc时,我使用gdb进行跟踪PTR == 0x0, size == 8

*编辑:段故障发生在:

void *tmp = realloc(ptr, size);

您的呼叫看起来很好。malloc()realloc()calloc()free()中的崩溃通常是程序中其他地方的错误的症状,在这些地方,您编写的代码超出了已分配块的范围,并且践踏了内存分配函数使用的内务管理信息。

尝试在Valgrind或Purify之类的工具下运行您的程序。

确保调用realloc的代码具有该函数的有效原型(换句话说,包括stdlib.h)。

从32位转换到64位的许多问题涉及整数(如果没有原型则是默认参数)和指针之间的差异。虽然在64位平台上整数可以保持在32位,但指针的大小可以增加。

既然您声明指针为NULL,而请求的大小为8,那么这当然是该函数的有效使用。空指针的realloc实际上与malloc相同。这就是为什么我怀疑原型的问题。

还要确保在新机器上编译所有内容。如果试图将32位编译的srealloc与64位编译的客户端链接,可能会遇到问题。

相关内容

  • 没有找到相关文章

最新更新