我有一个函数将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
提前致谢!
答案 0 :(得分:3)
return (char *) *ptr;
*ptr
是一个char
,确切地指出ptr
指出的值,即您要回流到char*
。
您只需要返回ptr
。
答案 1 :(得分:3)
这一行:
return (char *) *ptr;
应该是这样的:
return ptr;
您在原始代码中执行的操作是取消引用ptr
,返回data
的第一个字节,然后将其转换为指针。这意味着您最终得到了一个带有无效地址的指针。