[英]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.