0

我有一个函数可以在这里将短转换为字节数组

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 版。我已经在 Properties -> C/C++ -> Advanced -> Compile As 中将语言设置为 C,但无济于事。而且我的文件具有 .c 扩展名,而不是 .cpp

提前致谢!

4

2 回答 2

3

return (char *) *ptr;

*ptr是 a char,准确地说是指向 a 的值ptr,你要转换回 a char*

你只需要返回ptr

于 2013-08-22T15:42:02.870 回答
3

这一行:

return (char *) *ptr;

应该是这样的:

return ptr;

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

于 2013-08-22T15:42:08.497 回答