首页 > 解决方案 > 访问结构成员时返回字节,打印结构变量地址时发生分段错误

问题描述

我创建了一个struct并将一个指针变量分配给该结构。当我尝试打印该变量的地址时,它会正确打印。在使用此结构变量为结构的成员之一赋值后pointer,当我尝试打印pointer我得到的变量的地址时segmentation fault

#include <stdio.h>

typedef struct node {
char mem;
double mem2;
char mem3;
int mem4;
char mem5;
char mem6;
}NODE;
int main()
{
    NODE * m;
    printf("%u",&m);

    return 0;
}

我得到的输出为 3014616488。当我将变量分配给结构成员之一时,

#include <stdio.h>

typedef struct node {
char mem;
double mem2;
char mem3;
int mem4;
char mem5;
char mem6;
}NODE;
int main()
{
   NODE * m;
   m->mem3 = 'A';
   printf("%u",&m);

   return 0;
}

我遇到了分段错误。当我这样做时

#include <stdio.h>

typedef struct node {
char mem;
double mem2;
char mem3;
int mem4;
char mem5;
char mem6;
}NODE;
int main()
{
    NODE * m;
    printf("%u",&m->mem3);

    return 0;
}

我得到 16 作为输出。我不知道16是怎么来的。它真的在我的脑海里挣扎。请任何人帮助我了解到底发生了什么。提前致谢

标签: cpointersmemory-managementsegmentation-faultstructure

解决方案


因为它没有分配任何内存

NODE * m = malloc(sizeof(NODE));

// Do stuffs

free(m);

所以试试这个:

int main()
{
    NODE * m = malloc(sizeof(NODE));

    m->mem3 = 'A';
    printf("%u",&m->mem3);

    free(m);

    return 0;
}

注意 :

Intc或者c++如果您声明 a pointer,则为pointer(通常在stack)保留一些内存。无论如何,指针没有被初始化,这意味着它指向与最后在相应内存位置中的地址相对应的地址。(这就是第一部分code工作的原因)。


推荐阅读