2012-09-04 30 views
0

對不起,如果我的問題不是很清楚。 我有一個結構是這樣的:位明智或兩個無符號整數(程序崩潰)

typedef struct 
{ 
    uint32_t typeSet; 
}DataTypeTagInfo; 

以下功能是統一2個排版:

DataTypeTagInfo* unifyTagInfo(DataTypeTagInfo* tag1, DataTypeTagInfo* tag2){ 
    if(tag1 == NULL) return tag2; 
    else if(tag2 == NULL) return tag1; 
    tag1->typeSet |= tag2->typeSet; 
    return tag1; 
} 

程序退出,同時執行以下行:

tag1->typeSet |= tag2->typeSet; 

在一個樣品運行我有以下值:

tag1->typeSet = 3917954189 
tag2->typeSet = 2536589 

沒有錯誤信息。只是退出。請幫忙。

+0

小心給我們一個錯誤信息或其他線索?你可能需要發佈更多的代碼。 –

+0

[可以顯示完整的測試代碼嗎?](http://sscce.org/) – Mysticial

+0

tag1是一種只有字段排版的結構,它是unsigned int。該程序剛剛退出,沒有顯示任何內容。 – sheikh

回答

2

您顯示的代碼非常完美。因此,很有可能tag1tag2在中止時是無效指針。這與您發佈的代碼無關。指針可以以許多方式設置爲無效。

爲了弄清楚發生了什麼,我會用代碼設置在調用點tag1tag2,然後仔細審查開始 - 如果答案沒有出現 - 移動到使用valgrind檢查內存覆蓋錯誤。

注意這使得C(++)如此具有挑戰性。

+0

感謝您的回覆。 – sheikh

+0

是的,非法結構指針是問題。謝謝。 – sheikh