C:尝试释放从函数返回的malloc'd char数组导致错误

时间:2013-08-22 15:40:16

标签: c malloc free

我有一个函数将short转换为字节数组

char *GetBytesShort(short data)
{
    char *ptr = (char *) malloc(sizeof(short));
    memcpy(ptr, &data, sizeof(short));
    return (char *) *ptr;
}

而且,在我的main.c中,我调用了这个函数

char *data = GetBytesShort(10);
free(data);

但是,每当我尝试释放内存时,都会出错 First-chance exception at 0x5896586E (msvcr110d.dll) in Project1.exe: 0xC0000005: Access violation reading location 0x00000004.

If there is a handler for this exception, the program may be safely continued.

我正在使用Visual Studios 2012 Ultimate版。我已经在属性中将语言设置为C - > C / C ++ - >高级 - >编译为,但无济于事。我的文件有.c扩展名,而不是.cpp

提前致谢!

2 个答案:

答案 0 :(得分:3)

return (char *) *ptr;

*ptr是一个char,确切地指出ptr指出的值,即您要回流到char*

您只需要返回ptr

答案 1 :(得分:3)

这一行:

return (char *) *ptr;

应该是这样的:

return ptr;

您在原始代码中执行的操作是取消引用ptr,返回data的第一个字节,然后将其转换为指针。这意味着您最终得到了一个带有无效地址的指针。