2012-09-06 55 views
0

的結構的I型有它接受作爲參數像提到的尺寸的函數:鑄造包括在的sizeof

sizeof(tcpstuct) * tcprules 

比方說

tcpstuct是具有式的結構INT32成員。 (INT32類型爲int,由於平臺依賴性定義爲INT32)

tcprules是類型爲NAT32的變量。

如果該函數接受另一種類型說WORD32。演員應該怎麼做?

我曾嘗試:

(WORD32) (sizeof(tcpstuct) * (INT32)tcprules) 
(WORD32) ((INT32)(sizeof(tcpstuct) * (INT32)tcprules)) 

但在賽格故障這兩個罰球!我需要投下sizeof嗎?

編輯:由於所有人士指出,賽格故障是由於一個錯誤的其他地方還有感謝GDB

+0

你知道鑄件保留了你想要的值嗎? –

+0

這不是導致分段錯誤的投射本身,而是其他事情。我建議你在調試器中運行你的程序(這應該是你得到默認的第一反應)。它將幫助您找到崩潰,並讓您檢查變量以幫助您瞭解崩潰的原因。 –

+0

「tcpstuct是一個INT32類型的結構」 - 我不知道這是什麼意思。 'tcpstuct'是一個對象還是一個類型?如果它是一個對象,那麼它不能是一個結構,如果它的類型爲'int'。如果它是一種類型,那麼說它是「INT32類型」是什麼意思? –

回答

1

如果sizeof(tcpstuct)是一個「啄」的大小,tcprules是「一樣的東西」的數量,則有應該不需要任何演員。

C不同整數類型之間的自動轉換,所以任何類型的表達sizeof(tcpstuct) * tcprules已,應轉換爲WORD32(不管它是什麼,但假設它是一個整數型)。

您的代碼中的錯誤很可能在其他地方,而且這種表達式很可能不會在您發佈的任何版本中導致段錯誤。也許segfault在你調用的函數中。

1

我沒有看到任何可能的崩潰在您的報表中。段錯誤必須在其他地方。