繁体   English   中英

指向结构的指针

[英]Pointer to a struct

我试图更多地了解指针,并且在此示例中遇到了麻烦。

 typedef struct{
    int areaCode;
    int streetNumber;
 }Address;
 Address *addr;
 addr->areaCode = 10000;
 printf("%d\n", addr->areaCode);

我遇到了细分错误,似乎无法理解原因。

addr是指向Address结构的指针,因此我也尝试过:

 *addr->areaCode = 10000;

并且还得到了“间接要求指针操作数”,有什么想法吗?

Address *addr;

您只声明了一个指针addr ,但它指向未知的地方。 您没有为其分配内存空间。

要修复它,请更改为

Address *addr = malloc(sizeof(Address));

您尚未为结构对象分配内存。 要么使用malloc()或简单地声明类型的可变Address ,而不是指针Address (在这种情况下,访问部件使用.操作者而不是-> )。

选项一:

Address *addr = malloc(sizeof *addr); // don't forget #include <stdlib.h>
if (addr == NULL) {
    // handle failed allocation
}
// ...
free(addr); // free(addr), addr = NULL; if you like

选项二:

Address addr;

addr未初始化,因此包含一些“随机”值。 取消引用未初始化的指针会导致...问题。
无法访问的内存=分段错误。
访问没有分段错误的随机内存会导致内存损坏。

你可以做:

Address myAddress;
Address *addr = &myAddress;

这会起作用。 首先分配,然后获取指针。
这将产生一个指向堆栈上Address的指针。 当心在函数末尾超出范围。

您也可以这样做:

Address *addr = malloc(sizeof(Address));

这在堆上分配,因此实际的Address不会超出范围。 但是您确实需要记住要free(addr); 否则会导致内存泄漏。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM