2012-07-28 55 views
1
// set all values in the hash table to null 
for(int i = 0; i < HASH_SIZE; i++) 
{ 
    hashtable[i] = NULL; 
} 

我保持在響應收到這個錯誤訊息到hashtable中[I]:分配時將指針整數,未作施放[-Werror]

賦值時將指針整數,未作鑄造[-Werror]

爲什麼?

回答

4

如果hashtable是一個整數數組,則hashtable[i]需要一個整數,而NULL是一個指針。

所以你試圖給一個整型變量指定一個指針值(沒有強制轉換),這通常只是一個警告,但是因爲你有-Werror所有的警告都會變成錯誤。使用0代替NULL

+0

啊,我明白了。我也可以聲明一個指針數組並存儲這個值。我現在明白了。謝謝! – hannah 2012-07-28 02:53:47

0

NULL在stddef.h

#ifndef _LINUX_STDDEF_H 
#define _LINUX_STDDEF_H 

#undef NULL 
#if defined(__cplusplus) 
#define NULL 0 
#else 
#define NULL ((void *)0) 
#endif 

#endif 

如果散列表是整數數組定義爲(void*)0,像

#include <stdio.h> 
#define HASH_SIZE 100 
int main() 
{ 
int i = 0, hashtable[HASH_SIZE]; 
for(i = 0; i < HASH_SIZE; i++) 
{ 
    hashtable[i] = NULL; 
} 
return 0; 
} 

warning: assignment makes integer from pointer without a cast將被顯示。

+0

什麼讓你相信OP使用Linux?什麼讓你相信NULL必須以這種特定的方式來定義?請注意,通過從一個系統進行推斷來做出假設會讓您感到驚訝。相反,閱讀和引用ISO C標準可能會提供明確的答案。這樣的答案獨立於操作系統和標題內容。 – Jens 2012-07-28 12:27:51

+0

@Jens,謝謝。我會盡力遵循ISO C標準:) – Jeyaram 2012-07-29 03:48:10

相關問題