访问结构成员时返回字节,打印结构变量地址时发生分段错误

bytes were returned when we access the structure member and Segmentation fault occurs when printing structure variable address

我创建了一个 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是怎么来的。这真的让我很费解。请任何人帮助我了解到底发生了什么。提前致谢

因为它没有分配任何内存

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;
}

注意事项:

Int cc++ 如果你声明一个 pointer,一些内存是为 pointer 保留的(通常在 stack)。但是指针没有被初始化,这意味着它指向的地址对应于最后在相应内存位置中的内容。 (这就是 code 的第一部分起作用的原因)。