【发布时间】:2020-11-22 12:59:44
【问题描述】:
所以我有这段代码,stack_push 实现需要一个地址, 所以每当我改变 cnt 值时,其他一切都会改变,我该如何防止呢? 我想要它 x= 5 然后 x= 2 我无法更改我的 stack_push 函数,因为它是一个不透明的结构
int main(void){
struct stack *a = stack_create(10*4);
int cnt = 10;
int i=cnt;
while (cnt != 1){
cnt = i/2;
stack_push(a,&cnt);
i = cnt;
}
int *x = stack_pop(a);
x = stack_pop(a);
stack_destroy(a);
}
【问题讨论】:
-
使用单独的变量。提供给您的堆栈 API 存储指向原始变量的引用/指针。所以你需要每次推送不同的变量。
-
由于您没有显示正确的minimal reproducible example,因此除了猜测之外很难做任何事情,但猜测是堆栈包含指向
int的指针(而不是int值)。由于您要添加指针,所有指针都将完全相同:指向cnt的指针。由于所有指针都相同,因此该值似乎是分配给cnt的最后一个值。