海湾合作委员会执行官如果和否则也是..这是一个错误

gcc exec if and else too... is this a bug?

本文关键字:错误 一个 委员会 执行官 如果      更新时间:2023-10-16
使用 gcc 版本 4.6.3

(Ubuntu/Linaro 4.6.3-1ubuntu5)

在指针 A 上使用 if else 语句时:

if(a==NULL)
    ....
else
   .....

两者都被执行。有人可以解释我吗?

这里是使用 malloc C/C++ 函数实现 Dinamic 列表的代码的一部分。

编译代码:

#include <iostream>
#include <cstdlib>
using namespace std;
struct simplelist {int v;struct simplelist *ptr;};
void push(simplelist &s,int value);
void printlist(simplelist &s);
int main()
{
struct simplelist list; list.ptr=NULL;
push(list,1); push(list,2); push(list,3); push(list,4);
int v=0; v=getsize(list); cout<<"size: "<<v<<endl;
return 0;
}
void push(simplelist &s,int v)
{
if (s.ptr==NULL)
{
    s.v=v;
    s.ptr=(simplelist *) malloc(sizeof(simplelist));
    if(s.ptr==NULL) cout<<"out of memory"<<endl; 
}
else
    push(*s.ptr,v);
}
int getsize(simplelist &s)
{
int v=1;
if (s.ptr==NULL)
    {
        v--;
        cout<<"getsize s.ptr=null"<<endl; //here bug?
    }                                     //program exec if and else statement
else
{
    v=v+getsize(*s.ptr);
    cout<<"getsize elsewere"<<endl;
}

return v;
}

我得到了输出:

getsize s.ptr=null
getsize elsewere
getsize elsewere
getsize elsewere
getsize elsewere

您的函数只是以相反的顺序打印消息。(第一条消息与最后一个元素相关,依此类推。

else
{
    v=v+getsize(*s.ptr);
    cout<<"getsize elsewere"<<endl;
}

必须是

else
{
    cout<<"getsize elsewere"<<endl;
    v=v+getsize(*s.ptr);
}
由于其

递归结构,getsize()列表中的每个节点打印出一行。首先打印最后一个节点,并且是ptr NULL的唯一节点。

相关文章: