c - 修改结构实例的变量
问题描述
struct test{
int value;
struct test *child;
};
void change(struct test *t){
t->child[1].value = 100000;
t->child[0].value = 100000;
}
int main (void) {
struct test *f = (struct test *)malloc(sizeof(struct test));
struct test *s = (struct test *)malloc(sizeof(struct test));
struct test *t = (struct test *)malloc(sizeof(struct test));
struct test *list = (struct test *)malloc(2*sizeof(struct test));
f->value = 1;
s->value = 1;
t->value = 1;
list[0] = *s;
list[1] = *t;
f->child = list;
//init(t);was a typo
change(f)
printf("%d",t->value);
}
如何在不更改结构和参数的情况下将 t->value 的值更改为 100000?我试图在 change() 中创建结构的新实例,但仍然无法正常工作。
解决方案
您的代码中有几个问题(可能与您的问题无关):
1.“init”函数未定义,我认为这应该是“change”。
2.如果你调用change(t),你正在访问未初始化的指针,你的程序的行为将是未定义的,所以我假设而不是
f->child = list
你的意思是:
t->child = list
- 我猜你不想像我上面提到的那样使用第 2 步,而是想以某种方式让程序在 f 中写一些东西,大小比 f 长,这样程序就会溢出并开始在下一个内存位置上写,所以“在不改变结构和参数”的情况下,正如你提到的,t 的值会改变。如果是这种情况(我希望我能写出问题),那么您忽略了这样一个事实,即连续调用 malloc 并不能保证分配连续的内存块,我运行了您的代码,以下是分配给指针的地址:
sizeof struct: 8
addresses : f: b72f18 , s: b72f48 , t: b72f80 , list: b72f90
所有这些答案都应该在评论中发布,但评论还没有为我解锁。
推荐阅读
- python - Kivy - 如何将项目从 ScrollView 拖放到另一个布局?
- excel - 在 Excel 中使用 AND 运算符和多个条件进行条件格式设置
- html - 如何对齐定价表并将它们与 bootstrap 和 scss 居中
- c - 将 char 指针传递给 C 中的函数。只取第一个位置
- javascript - 如何使用 .css 函数通过 jquery 切换 css
- javascript - 为什么 JavaScript 的逻辑 AND (&&) 与 if 条件不一样?
- java - 将收藏的项目保存和检索到 firebase-database
- oracle - 确定支持哪些 ora_type 值
- python - 是否可以继承 win32serviceutil.ServiceFramework 的子类?
- elasticsearch - 创建弹性搜索域的 Terraform 配方似乎挂起