海湾合作委员会执行官如果和否则也是..这是一个错误
gcc exec if and else too... is this a bug?
使用 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
的唯一节点。
相关文章:
- C++,我收到一个无法理解的编译器错误
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 删除映射和分割错误中的一个过去结束元素
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- 写一个分数类,我无法弄清楚这些错误
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 一个标头库中的错误
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- 我正在尝试制作一个自平衡机器人,但编译时存在错误。我不知道如何解决它
- 试图修复一个错误,该错误不会让我开始编程其余部分
- MSVC 无法根据模板参数进行数学运算,这是一个错误吗?
- 我正在尝试一个傻瓜 C++ 练习,我遇到了一个错误,说类 'GraduateStudent' 没有任何名为 'advisor' 的字段
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- LNK2019错误一个DLL链接到MFC DLL
- 错误:一个声明中有多个类型
- 带有两个运算符的C++11模糊错误(一个左值-第二个右值).底部的