c - 访问结构成员时返回字节,打印结构变量地址时发生分段错误
问题描述
我创建了一个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;
}
注意 :
Intc
或者c++
如果您声明 a pointer
,则为pointer
(通常在stack
)保留一些内存。无论如何,指针没有被初始化,这意味着它指向与最后在相应内存位置中的地址相对应的地址。(这就是第一部分code
工作的原因)。
推荐阅读
- php - 从 mongodb find() 结果中获取变量
- google-sheets - 从其他标签复制数据时使用 Google 表格或声明
- javascript - 为自定义值编辑移动仪表的代码
- openldap - 当我不知道任何用户或密码进行身份验证时,如何第一次使用 ldapmodify?
- django-i18n - 找不到 Django i18n URL 媒体文件
- mongodb - 在中间管道中,$addFields 和 $project 之间哪个性能更好
- hadoop - 使用 HUE 的 JAR
- react-native - 找不到 com.google.firebase:运行 react-native run-android 时
- sql - 取PostgreSQL中两个列表的区别
- javascript - 无法更新用户的电子邮件