[英]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.