0

我尝试将unsigned char*转换为字符串,但问题是我从控制台收到此错误:

检测到 glibc ** free(): 无效的下一个大小 (快速): 0x097a1060

最小化代码:

unsigned char * base64= NULL;
base64 = (unsigned char *)"test";
std::string str((const char *)base64, strlen((const char*)base64)) ;
std::cout<<str; 

PS:我有一个返回 unsigned char* 的函数

谢谢你。

4

1 回答 1

1

我最好的猜测是你正试图释放这个指针。

base64 = (unsigned char*)"test";

是对常量的引用。这是我的最小示例:

#include <string>
#include <cstring>
#include <iostream>
#include <cstdlib>

int main(int argc, char **argv)
{
        unsigned char * base64= NULL;
        base64 = (unsigned char *)"test";
        std::string str((const char *)base64, strlen((const char*)base64)) ;
        std::cout<<str<<std::endl;

        free(base64);

        return 0;
}

这会引发 glibc 错误和核心转储,这是应该的!没有 free(),一切正常。

于 2012-11-14T20:22:27.600 回答