【发布时间】:2016-12-05 02:39:24
【问题描述】:
我试图弄清楚为什么函数返回后我的结构值丢失了。
struct A {
int val1;
int val2;
}
main() {
struct A *a;
a->val1 = 1;
a->val2 = 2;
calc((void*)a);
// calc returns and a's values are 1 and 2 respectively
}
void calc(void* v) {
struct A *a = (struct A*) v;
...
a->val1 = 2;
a->val2 = 3;
}
【问题讨论】:
-
在
main:struct A *a; a->val1 = 1;你认为a指向哪里?除非指针指向有效内存,否则不得取消引用。 -
a应该是堆栈中的地址(如果我错了请纠正我)。我尝试为a分配空间,但仍然得到相同的结果。 -
为什么定义
main()来返回struct A?您缺少一个关键分号! -
@Celeste 为什么
a应该是堆栈上的地址?您在哪里分配a一个作为堆栈地址的值?当然,a本身是堆栈上的一个位置,但a本身是一个指针。你需要一个实际的A,而不仅仅是指向一个的指针。