繁体   English   中英

在C&pointer中调用函数以构造

[英]Calling function in C &pointer to struct

今天是个好日子,

我开始使用C进行编程,也许我的问题看起来很愚蠢,但是是否有任何条件会阻止方法执行?

现在,我正在编写使用链接列表结构的程序,所有内容都可以编译,但是在代码程序中的某一行之后,不会调用方法。 这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct node
{
        char* toFrom;
        char* meanOfTr;
        int hours;
        int min;
        double price;
        char* note;
        struct node *next;
}travel;

typedef struct list
{
    travel * head;

}list_t;

void add(list_t *list,char toFrom1[], char meanOfTr1[], char note1[],int hours1,int min1,double price1);
void test();

int main(void) {

    list_t *list;
    test();
    list->head=NULL;
    test();
    char* a="London";//then b,c,h,m,p variables declarations and initialization,which doesn't matter 

    add(list,a,b,c,h,m,p);

    return 0;
}
void test()
{
    printf("test\n");
}


void add(list_t *list,char *toFrom1, char* meanOfTr1, char* note1,int hours1,int min1,double price1)
{

    // Some code here

}

我使用打印“测试”的测试方法来检查程序是否读取此方法。 但是由于某些原因,在“ list-> head = NULL;”行之后 程序什么都不打印=>不调用方法

如果有人能解释我为什么会这样,我将非常感激。 提前感谢

编辑:我实际上解决了问题:问题是指针没有指向实际对象,所以当我添加

list_t l;
    list_t *list = &l;

它的工作,希望它会帮助有同样愚蠢的问题的人(:感谢您的评论,我会记住一切

 int main(void) {

   list_t *list;
   test();
   //De-referencing a dangling pointer 
   list->head=NULL;
   test();

请参阅我在代码中的上述注释。 您正在取消引用一个悬空指针,它是未定义的行为,可能会导致分段错误。

由于您可能是c的新手,所以我将进一步说明:

list_t *list不分配任何内存,它所做的只是在堆栈上分配一个位置来存储分配的内存的位置。 因此,从广义list_t*list将指向具有足够空间来容纳list_t 创建该空间并将位置分配给list取决于您。

您应该执行以下操作:

 int main(void) {

   list_t *list;
   test();
   list =  malloc(sizeof(list_t));
   //Always check for a null return from malloc!
   if(!list){
    perror("Malloc failed");
   }
   list->head=NULL;
   test();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM