free释放指针为什么会出错?求大牛解答.

发布网友 发布时间:2022-04-24 12:25

我来回答

3个回答

热心网友 时间:2023-10-12 19:21

因为hanzi数祖未加结束符,所以sprintf时,hanhex的长度就未知了,可能越界了。
free时应该是根据malloc时分配的空间大小来free。可能会报错。
另外,编译器报的错应该不是free,而是在前面sprintf时就越界了。
所谓free不行了,应该是根本就没走到free.
其实,c里能用数组尽量用数组。

热心网友 时间:2023-10-12 19:21

在StrToIntEx函数调用之后加一行hanhex = hanhex;

热心网友 时间:2023-10-12 19:22

#include <iostream>
#include <string>
#include <Shlwapi.h>
#pragma comment(lib, "shlwapi.lib")
using namespace std;
//例如输入621172314F60,会得到"我爱你";
int main()
{
wcout.imbue(std::locale("chs"));
string text;
cin>>text;
char hanzi[6];
int len = text.length();
int i = 0;
int j;
char *hex = "0x";
while(i!=len)
{
for(j=0;j<=3;j++)
{
hanzi[j] = text.at(i);
i++;
}
hanzi[j]=0; //加结束符

int unicode;

char *hanhex;
hanhex = (char *)malloc(sizeof(char)*len+2);
if(NULL==hanhex)
{
return -1;
}
sprintf(hanhex,"%s%s",hex,hanzi);
StrToIntExA(hanhex, STIF_SUPPORT_HEX, &unicode); //StrToIntExA
wcout<<wchar_t((unsigned short)unicode)<<endl;
free(hanhex);
hanhex = NULL;
}
system("pause");
return 0;
}追问谢谢啦!程序可以执行,但我想知道深层的原因,是不是因为free释放的时候要知道内存的分配的大小,而这个是以结束符为判断标志?

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com