指向一个空结构
Pointing to an empty struct
我很好奇为什么会出现以下段错误:
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 is located at 0x55a3629e0340.
Segmentation fault (core dumped)
例如,为什么 hammy->title
不打印空字符串或 [=13=]
或一些乱码或其他内容?创建指向(未定义)Book
的指针时,它指向什么开始?
hammy
声明为 Book *
类型,指向 Book 的指针,只是一个整数。但那一刻是uninitialized. It will contain whatever garbage was on the 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 类型的实例。
我很好奇为什么会出现以下段错误:
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 is located at 0x55a3629e0340.
Segmentation fault (core dumped)
例如,为什么 hammy->title
不打印空字符串或 [=13=]
或一些乱码或其他内容?创建指向(未定义)Book
的指针时,它指向什么开始?
hammy
声明为 Book *
类型,指向 Book 的指针,只是一个整数。但那一刻是uninitialized. It will contain whatever garbage was on the 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 类型的实例。