2012-07-28 27 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

相关问题