不能在C++中释放字符 我现在正在开发C++中的一个项目,在一个模块中,我遇到了一个问题:我不能释放指针。 问题是用字符串操纵char*。 我需要使用char *为OpenSSL的LIB和Strutok,我知道这不是唯一的方法,但是我更喜欢使用它,因为它看起来更难用C++方式。

不能在C++中释放字符 我现在正在开发C++中的一个项目,在一个模块中,我遇到了一个问题:我不能释放指针。 问题是用字符串操纵char*。 我需要使用char *为OpenSSL的LIB和Strutok,我知道这不是唯一的方法,但是我更喜欢使用它,因为它看起来更难用C++方式。,c++,pointers,free,C++,Pointers,Free,我不明白为什么我不能释放已注释的char*,未验证的自由指针,放弃 你有什么想法和解决办法吗? 谢谢 除了C++编程时使用旧C样式字符串的问题外,还有一个大问题: 您可以像这样为行分配内存 char* line= (char*)malloc(BUF_SIZE * sizeof(char)); 然后再往下排几行 line=(char*)sline.c_str(); 这会更改行,使其不再指向您分配的内存,现在尝试释放它将导致未定义的行为 您对statut指针也有同样的问题 以下是几个相关的注

我不明白为什么我不能释放已注释的char*,未验证的自由指针,放弃

你有什么想法和解决办法吗? 谢谢


除了C++编程时使用旧C样式字符串的问题外,还有一个大问题:

您可以像这样为行分配内存

char* line= (char*)malloc(BUF_SIZE * sizeof(char)); 
然后再往下排几行

line=(char*)sline.c_str(); 
这会更改行,使其不再指向您分配的内存,现在尝试释放它将导致未定义的行为

您对statut指针也有同样的问题

以下是几个相关的注意事项:

每次你发现自己在做C风格的演员,你可能在做一些不应该做的事情

由返回的数据被认为是只读的,尝试修改它也会导致未定义的行为。如果要修改数据,函数会修改传递给它的字符串

行被未通过malloc在line=char*sline.c_str;处分配的内容覆盖;。不要释放它

statut被statut=strtokNULL;;处未通过malloc分配的内容覆盖;。不要释放它


我在这个函数中没有发现任何哈希覆盖,但它的缓冲区可能太小,无法存储带有终止空字符的字符串。

使用malloc和free有什么好的理由吗?我有点怀疑,你为什么要用malloc?我假设SHA_DIGEST_LENGTH和BUF_SIZE是常量,所以只需在堆栈上使用数组即可。不需要释放任何东西
line=(char*)sline.c_str();