Realloc导致错误(堆块超过请求的大小......)

时间:2015-08-11 16:43:23

标签: c dynamic char malloc realloc

我正在尝试创建一个对动态字符串执行某些操作的程序。下一个方法应该将myString设置为空字符串。

每当我尝试使用字符串realloc()结构时(就像在代码行中仅为了演示目的而添加),它会导致错误:

堆积在0000000000541E80处修改为0000000000541E91过去请求的大小为1.

导致问题的原因是什么?我几周前才开始学习C语言,所以请不要使用高级术语。

struct _MyString
{
    char* myString;
};


MyString * myStringAlloc()
{
    MyString *newMyString = (MyString*) malloc(0);
    if(newMyString == NULL)
    {
        return NULL;
    }
    newMyString->myString = "";
    newMyString = (MyString*) realloc(newMyString, 4);
    //some more code
    return newMyString;
}

1 个答案:

答案 0 :(得分:1)

尝试使用:)

MyString *newMyString = (MyString*) malloc( sizeof( struct MyString ) );

而不是

MyString *newMyString = (MyString*) malloc(0);
                                          ^^^^

根据C标准(7.22.3内存管理功能)

  

如果请求的空间大小为零,则行为为   implementation-defined:返回空指针,或者   行为就像大小是一些非零值,除了   返回的指针不得用于访问对象。

在您的代码段中,程序两次尝试使用指针访问该对象。本声明中的第一次

newMyString->myString = "";

和本声明中的第二次

newMyString = (MyString*) realloc(newMyString, 4);

尝试复制原始对象时。