gpt4 book ai didi

c - 访问结构中的整型变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:49:55 25 4
gpt4 key购买 nike

我创建了一个存储整数的结构,然后在一个方法中我将整数设置为一个值。但是,当我尝试以任何其他方法访问该值时,会得到一个不相同的大值。

typedef struct thing {
int size;
arraylist** list; // defined elsewhere
} thing;

// Creates a thing
void create (thing* table) {
table = (thing *)malloc(sizeof(thing) * 8);
table->size = 1;
printf("%d", table->size); // prints 1
}

void another (thing* table) {
printf("%d", table->size); // prints a large number
}

void main() {
struct thing a;
create(&a);
printf("test: %d", (&a)->size); // prints a random large number, ex. 1667722352
another(&a);
}

最佳答案

您正在覆盖堆栈上的一个变量,它稍后会为您提供意想不到的值。

在你的主函数中,你声明了一个 struct thing在堆栈上。

void main() {
struct thing a; // Stack allocated variable
create(&a);
printf("test: %d", (&a)->size); // prints a random large number, ex. 1667722352
another(&a);
}

所有的内存都已经存在了,但是您随后获取变量的地址并将其传递给其他函数。现在,您将该地址(按值)传递给 create , 调用 malloc并替换该引用。您刚刚分配的地址不是堆栈上对象的地址。而且,因为您还没有真正初始化堆栈上的对象,所以您最终会打印出垃圾值。

我不确定您要做什么,但是解决这个确切实例的一种方法是不 malloc获取新内存并仅使用堆栈中的内容。

// Creates a thing
void create (thing* table) {
// table already has memory
table->size = 1;
printf("%d", table->size); // prints 1
}

关于c - 访问结构中的整型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com