如何解决指向一个空结构
我很好奇为什么发生以下段错误:
typedef struct Book {
char* title;
unsigned int year;
} Book;
int main(int argc,char * argv[])
{
Book *hammy;
printf("Hammy is located at %p.",hammy);
printf("Hammy has the title: %s.",hammy->title);
}
Hammy位于0x55a3629e0340。
分段错误(核心已转储)
例如,为什么hammy->title
不打印空字符串或\0
或出现一些乱码或其他内容?创建指向(未定义的)Book
的指针时,它指向什么开始?
解决方法
hammy
被声明为类型Book *
,它是Book的指针,只是一个整数。但这是uninitialized。它将包含当时stack上的所有垃圾。就我而言,它是0。
您可以打印hammy
,因为它只是一个整数。当您尝试使用hammy->title
取消引用指针时,操作系统将不允许您使用该指针。它指向的内存不属于该进程,或者为空。您得到segmentation fault。
您需要使用一些东西对其进行初始化。
Book *hammy = &(Book){
.title="Nothing in This Book Is True,but It's Exactly How Things Are",.year=1994
};
,
首先,
预定* hammy;
这意味着您正在声明指针变量。由于未使用book变量的任何地址进行初始化,因此它将包含随机地址。这就是细分错误的原因。
第二,
未声明书的变量,因此我们如何获取书的内容,声明指针并不意味着我们在声明书的实例。我们只是告诉指针,存储在 hammy 中的地址将指向Book类型的实例。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。