我有以下的代碼塊:如何將指針轉換爲整數,反之亦然?
typedef Module * Ptr;
producer(Ptr net)
Ptr Node;
Node = net;
pthread_mutex_lock(&mutex);
produce(q,(uint64_t)Node);
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
這裏產生是一個庫: 農產品(隊列Q,uint64_t中值)
然後,我有消費者的代碼:
consumer()
Ptr Node;
pthread_mutex_lock(&mutex);
while(!canConsume(q))
{
pthread_cond_wait(&cond,&mutex);
}
Node = (Ptr)consume(q);
pthread_mutex_unlock(&mutex);
但是,當我嘗試在兩個函數中打印出modNode的值時。雖然生產者函數中的節點似乎是地址,但消費者函數中的節點似乎爲0.我認爲我以某種方式搞亂了指針和整數之間的轉換,因爲此代碼可以在傳遞整數時正常工作。我的問題是如何將指針轉換爲uint64_t?
什麼是q?你自己寫了「消費」和「生產」嗎?你確定'消費'或'生產'沒有錯誤嗎? – immibis
問題可能是您不知道每個將構建的平臺上的實際指針大小。因此,儘可能使用['(u)intptr_t'](https://en.wikibooks.org/wiki/C_Programming/C_Reference/stdint.h#Integers_wide_enough_to_hold_pointers)。 – StoryTeller
很難從你的帖子中知道,但是當你測試它時Node爲0,而0通常是C中NULL指針的值,我懷疑在某個階段你的consume()函數返回NULL。隊列可能是空的。 – StephenG