指针分配中的警告

时间:2014-01-18 15:24:53

标签: c pointers

我对C比较陌生。我写了以下代码:

#include "HashTable.h"

hashTable* newHashTable()
{
    hashTable* h = malloc(sizeof(hashTable));
    h -> size = TABLE_SIZE;
    h -> table = createTable(TABLE_SIZE);
    return h;
}

entry* createTable(int size)
{
    entry* table = malloc(sizeof(entry) * size);
    int i;
    for(i=0; i<size; i++)
        (table + i) -> word = NULL; 
    return table;
}

,HashTable.h的内容是:

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define TABLE_SIZE 7
#define HASH_INCREMENT 3 // for efficient utilization of the hash table keep TABLE_SIZE * 2^n relative prime to HASH_INCREMENT
typedef struct entry_t
{
    char* word;
    int frequency;
}entry;
typedef struct hashTable_t
{
    int size;
    entry* table;
}hashTable;

当我尝试编译此代码时(还有一些其他代码)我收到以下警告:

HashTable.c: In function ‘newHashTable’:
HashTable.c:7:13: warning: assignment makes pointer from integer without a cast [enabled by default]

第7行实际上是newHashTable()函数中的第三行。我现在正在看这几个小时。请帮我解决这个警告。

1 个答案:

答案 0 :(得分:4)

Ansii C假设未声明的任何函数返回int

您应该在createTable

之前声明newHashTable
entry* createTable(int size);

hashTable* newHashTable()
{
    /* implementation */
}

entry* createTable(int size)
{
    /* implementation */
}

或在任何通话之前移动其实施

entry* createTable(int size)
{
    /* implementation */
}

hashTable* newHashTable()
{
    /* implementation */
}

或声明标题中也定义结构

的函数
typedef struct entry_t
{
    char* word;
    int frequency;
}entry;
typedef struct hashTable_t
{
    int size;
    entry* table;
}hashTable;

entry* createTable(int size);
hashTable* newHashTable();