2014-04-16 44 views
0
#include <stdio.h> 


typedef struct test{ 
int app; 
}test; 

int main() 
{ 
int fi; 
FILE* fp; 
test* banned; 
banned->app=2; 
fi=chdir("/home"); 
    printf("%d", fi); 
return 0; 
} 

这是一个较大的程序的一部分。我需要能够从一个读入文件导航到一个目录,并将这些信息放入一个结构体中。然而,每当这个程序编译它seg故障。在gcc上编译运行gdbSegfault与箭头运算符在C运行chdir然后打印

#0 0x08048421 in main() 

这是编译器的问题,还是代码中缺少某些东西来启用它?

注意:这已经解决了我是一个完全的白痴,并试图从帽子里拉出一个拉博特,我只是在我头脑中进行了简单的说明......否则我知道我没有将我的参考与实际值相关联,因此编译器投掷一个合适的。该解决方案是建立一个“真正的结构”,然后通过参考具有参考指针指向该= & normalpointer感谢您的帮助

也不亚于ID爱用的结构没有参考,我需要这种传递到不同的功能。但是,提到解决方案比什么IM做

+1

“它赛格故障” - 哎呀,有什么惊喜,'banned'具有明确的价值和所有。 –

+0

禁止未初始化。改为禁止测试; banned.app = 2;' – BLUEPIXY

+0

你还没有分配任何被禁止的空间。 – cup

回答

2

您写下未初始化的指针,因为你已经定义banned为指针,以test类型的结构,而不是test类型的实例更好。将test* banned更改为test banned。然后,您将使用.而不是->来访问banned的成员,例如, banned.app=2

+1

然后'banned-> app = 2'应该改为'banned.app = 2'。 –

+0

@MikeHolt对。编辑我的答案。 – tgies

+0

引用的原因是它可以传递给一个函数并进行修改,在任何情况下,我找到了解决方案,创建一个真实的项目,然后通过pointerstruct =&normalstruct指定它的指针;作品奇观 – user3542874