大家好日子,
我开始使用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
}
我使用打印“test”的测试方法来检查程序是否读取此方法。 但由于某种原因,行“list-&gt; head = NULL;” 程序不打印任何内容=&gt;不调用方法
如果有人能解释我为什么会这样,我会非常感激。 Thanx提前
编辑:我实际上解决了问题:问题是指针没有指向实际对象,所以 当我添加list_t l;
list_t *list = &l;
它有效,希望它能帮助有同样愚蠢问题的人(: 感谢您的评论我会记住一切
答案 0 :(得分:4)
int main(void) {
list_t *list;
test();
//De-referencing a dangling pointer
list->head=NULL;
test();
在代码中查看我的上述评论。您正在取消引用悬空指针,这是未定义的行为并可能导致分段错误。
既然你可能不熟悉c,我会再解释一下:
list_t *list
不分配任何内存,它只是在堆栈上分配一个位置来存储已分配内存的位置。因此,从更广义的角度来看,*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();