访问结构成员时返回字节,打印结构变量地址时发生分段错误
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 c
或 c++
如果你声明一个 pointer
,一些内存是为 pointer
保留的(通常在 stack
)。但是指针没有被初始化,这意味着它指向的地址对应于最后在相应内存位置中的内容。 (这就是 code
的第一部分起作用的原因)。
我创建了一个 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 c
或 c++
如果你声明一个 pointer
,一些内存是为 pointer
保留的(通常在 stack
)。但是指针没有被初始化,这意味着它指向的地址对应于最后在相应内存位置中的内容。 (这就是 code
的第一部分起作用的原因)。