C++ 我试图计算这个连续的分数,但我似乎无法工作,但该程序可以正确编译,但崩溃,而它的工作
我试图让这个程序工作,因为它需要计算连续分数输入一个链表。节目没有显示任何错误,但它总是在中间崩溃。有人能帮我吗 任务只是将程序存储在一个链表上,然后通过从链接中获取参数来计算它。它是一个连分数C++ 我试图计算这个连续的分数,但我似乎无法工作,但该程序可以正确编译,但崩溃,而它的工作,c++,linked-list,floating-point,singly-linked-list,continued-fractions,C++,Linked List,Floating Point,Singly Linked List,Continued Fractions,我试图让这个程序工作,因为它需要计算连续分数输入一个链表。节目没有显示任何错误,但它总是在中间崩溃。有人能帮我吗 任务只是将程序存储在一个链表上,然后通过从链接中获取参数来计算它。它是一个连分数 #include <iostream> #include <cmath> using namespace std; struct node { int data; node *next; } *h=nullptr, *t=nullptr; float calcu
#include <iostream>
#include <cmath>
using namespace std;
struct node
{
int data;
node *next;
} *h=nullptr, *t=nullptr;
float calculation (int co)
{
float a,c;
node *b,*f;
b->next = f;
while(co != 0)
{
f = t;
a = (float)f->data;
a = 1/a;
c = (float)b->data;
a = c + a;
t = b;
co--;
}
return a;
}
void storedata (int& c)
{
node *n = new node;
n->data = c;
n->next = nullptr;
cout<<n->data<<endl;
if(h==nullptr)
{
h=n;
t=n;
n=nullptr;
}
else
{
t->next=n;
t=n;
}
}
void formula (int a, int b, int co)
{
int c;
int z;
while (co!=0)
{
c = a/b;
storedata(c);
z = b*c;
z = a-z;
a = b;
b = z;
co--;
}
}
int main ()
{
int a,b,c,z,co,d;
float e;
a = 123;
b = 100;
co = 5;
formula (a,b,co);
e = calculation(co);
cout<<"cf1 = 123/100 ="<<e;
}
至少存在以下问题,其中一些问题会在启用警告的情况下被发现,例如:墙壁: 使用未初始化的指针,例如节点*b、*f;b->next=f;。这会导致未定义的行为 新增但不删除任何位置,因此将出现内存泄漏
公式和计算之间有什么联系。动态内存变量之间没有连接。如果变量是临时变量,则无法从一个内存块访问其他内存块。如果在函数运行后退出函数,则所有变量都将被销毁,并且动态将导致内存泄漏。您需要连接它们。@Timurkukkharskiy它们实际上是连接在一起的。这有点难以识别,但公式通过存储数据和计算访问t来修改全局t。不过我同意,这是一个糟糕的设计。h和t应该是局部的,并作为函数参数传递。命名也很糟糕,它们应该是正反两个字母。没有人想用一个字母的变量名来阅读代码。我不知道这是否有帮助,但在最近的一个问题中,我发布了一个计算连分数的代码:。我对广告不放心。如果有人不同意,我会压制这个评论。