为什么我在solaris上遇到此分段错误?

时间:2011-08-15 14:55:57

标签: c++ segmentation-fault solaris uuid

所以要开始这个代码适用于我的所有redhat机器和其他一些solaris机器。产生故障的机器是solaris 64位。我的代码如下:

这是frUUID类:

  frUUID::frUUID()
  {}

  std::string frUUID::genUUID()
  {
    char uuidBuff[36];
    uuid_t uuidGenerated;
    uuid_generate_random(uuidGenerated);
    uuid_unparse(uuidGenerated, uuidBuff);

    std::cout << uuidBuff << std::endl; // prints out a correct uuid

    return std::string(uuidBuff);
  }

然后在单元测试中我有:

 frUUID uuids;

 std::string uuid1 = uuids.genUUID();
 std::cout << std::endl << "UUID 1: " << uuid1 << std::endl; 
 //This cout produces the seg fault on the uuid1

我不知道这里发生的一切似乎都是正确的?有没有人有任何想法?

3 个答案:

答案 0 :(得分:4)

来自uuid_unparse手册页:

  

uuid_unparse函数将提供的UUID uu从内部二进制格式转换为36字节的字符串(加尾拖'\ 0'

你的缓冲区太小了。你处于未定义的行为领域。

答案 1 :(得分:3)

您没有为uuidBuff中的尾随空字节留出空间。

答案 2 :(得分:0)

变化

char uuidBuff [36];

char uuidBuff [37];

表示空字符