无法使用正确的节点创建堆栈

时间:2019-01-23 14:00:05

标签: c stack

这是我使用的主要功能的初始部分:

SELECT ad_group_criterion.keyword.text FROM topic_view

现在的问题是,这将创建一个堆栈,该堆栈由这次所推送的所有节点中最后推送的元素组成。 在进行某些更改后,以下代码似乎可以正常工作。谁能告诉我为什么这首先不起作用。

int main() {
int q;
struct ListNode* S = NULL;
scanf("%d\n",&q);
int i;
for (i=0;i<q;i++){
    int queryType;
    scanf("%d", &queryType);
    struct NumOp* j;
    struct NumOp k;
    if(queryType == 1){
        double num;
        scanf("%lf", &num);
        if(num>=1 && num<=100){
            k.type='n';
            k.num=num;
            k.op='\0';
            j=&k;
            Push(&S,j);
        }
    }

解释就是我要寻找的。

1 个答案:

答案 0 :(得分:0)

在第一个变体中,您在循环内本地定义k。这意味着它将真正超出范围并终止其生命周期每次循环迭代。每次迭代以及循环结束时,指向该变量的指针都将变为无效。

由于所有元素似乎都相同的原因,是因为所有元素 都相同,因此堆栈中的所有指针都指向单个实例k。但是如前所述,这些指针(都是相同的)将立即失效,对它们的取消引用将导致undefined behavior