警告初始化使指针形成整数而不进行强制转换

时间:2014-10-05 19:59:24

标签: c

当我尝试使用此

测试我的代码时,我收到警告初始化使指针形成整数而没有强制转换
#include <stdio.h>
#include <string.h>
#include "List.h"
#include "List.c"
int main()
{
    int k;
    // make list
    ListP r = newlist();
    //check if empty
    k = isEmptyList(r);
    if(k=0)
    {
        printf("this list is empty");
    }
    else
    {
        printf("List not empty");
    }
    //display
    displayList(r);
    //insert
    insertItemList(r, "shuan");
    //check if empty
    k = isEmptyList(r);
    if(k=0)
    {
        printf("this list is empty");
    }
    else
    {
        printf("List not empty");
    }
    //display
    displayList(r);
    return 0;   
}

错误说它在newList()调用的行中,新列表的函数是

typedef struct List
{
    struct Node* head;
    int size;   
}List;

typedef struct Node
{
    char *info;
    struct Node* next;
}Node;
typedef struct Node *NodeP;
typedef struct List *ListP;

//makes a list
ListP newList()
{   
    List *p;
    ListP g;
    p = (List*) malloc(sizeof(List));
    if(p == NULL) 
    {
        fprintf(stderr, "Memory allocation failed!\n");
        exit(1);
    };
    p->size = 0;
    p->head == NULL;
    g = p;
    return g;
};

这是否意味着该函数正在退出1,因为malloc不为列表分配内存,而且语法不正确或者代码是否存在其他问题?任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

也许你应该得到关于&#39; unknown&#39;的警告。功能。这意味着函数newList存在问题,编译器假定未知函数返回int,并继续...

可能的原因:该函数名为newList,但您使用

ListP r = newlist();
             ^

您应该仔细检查是否包含正确的标题且名称是否正确,以及之前声明该功能。搜索区分大小写(默认情况下grep区分大小写,如

grep -r "newlist" .  // verify
grep -r "newList" .  // again...

将在您的项目根目录中工作)&#34; newlist&#34; &安培; for&#34; newList&#34;。你也不应该

#include "List.c"

但仅

#include "List.h"

然后更正比较p->head == NULL;与作业p->head = NULL;