这是我使用的主要功能的初始部分:
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);
}
}
解释就是我要寻找的。 p>
答案 0 :(得分:0)
在第一个变体中,您在循环内本地定义k
。这意味着它将真正超出范围并终止其生命周期每次循环迭代。每次迭代以及循环结束时,指向该变量的指针都将变为无效。
由于所有元素似乎都相同的原因,是因为所有元素 都相同,因此堆栈中的所有指针都指向单个实例k
。但是如前所述,这些指针(都是相同的)将立即失效,对它们的取消引用将导致undefined behavior。