指向结构的指针

时间:2014-10-28 16:03:10

标签: c pointers struct

我试图更多地理解指针,并且遇到了这个例子的问题。

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

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

addr是一个指向Address结构的指针,所以我也试过了:

 *addr->areaCode = 10000;

还有一个"间接需要指针操作数",任何想法?

3 个答案:

答案 0 :(得分:4)

Address *addr;

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

要解决此问题,请转到

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

答案 1 :(得分:1)

您尚未为结构对象分配内存。使用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;

答案 2 :(得分:1)

addr未初始化,因此包含一些&#39;随机&#39;值。取消引用未初始化的指针会导致......问题 访问不允许的内存=分段错误 访问没有段错误的随机存储器会导致内存损坏。

你可以这样做:

Address myAddress;
Address *addr = &myAddress;

这将有效。首先分配然后获取指针 这将生成指向堆栈上Address的指针。请注意它在功能结束时超出范围。

你也可以这样做:

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

这会在堆上分配,因此实际的Address不会超出范围。但是你需要记住free(addr);或者引入内存泄漏。