2011-08-15 90 views
0

所以開始這段代碼適用於我所有的紅帽機器和其他一些solaris機器。產生故障的機器是solaris 64位。我的代碼如下:爲什麼我在solaris上遇到這種分段錯誤?

這是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

您不會在uuidBuff中留下尾隨空字節的空間。

4

uuid_unparse手冊頁:

的uuid_unparse函數轉換從內部二進制格式所提供的UUID UU成36字節的字符串(加拖尾 '\ 0'

你的緩衝區太小了。你處於未定義的行爲領域。

+0

謝謝你,我的頭在這轉動了幾個小時,我不能相信我錯過了那個。 – Grammin

0

change

char uuidBuff [36];

char uuidBuff [37];

爲空字符

相關問題