gpt4 book ai didi

c++ - float 异常,段错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:21 24 4
gpt4 key购买 nike

我的程序中有一些与内存相关的问题。我开始调试它。我发现的是:检查 1 后我有错误: float 异常(核心 Dumbed)对于 czynnikipierwsze 中的 5,段错误10号和 bad_alloc 取消注释代码的最后一部分时。任何想法这可能是什么原因(使用 vector p = ....)

#include <iostream>
#include <cctype>
#include <vector>


using namespace std;
vector<int> CzynnikiPierwsze(int);


class NieprawidlowaDana //wyjatki
{};
class SpozaZakresu
{};



class RozkladLiczby{
private:
int *tab;
public:
RozkladLiczby(int); //konstruktor
vector<int> CzynnikiPierwsze(int); //metoda
~RozkladLiczby(); //destruktor
};


/////////////////BODY of the CLASS/////////////////////////////////////


RozkladLiczby::~RozkladLiczby() //destruktor
{}

RozkladLiczby::RozkladLiczby(int n){
int* tab = new int[n+1];
int i,j;

for( i=0;i<=n;i++)
tab[i]=0; //zerujemy tablice

for( i=2;i<=n;i+=2)
tab[i]=2; //zajmujemy sie liczbami parzystymi

for(i=3; i<=n;i+=2)
for(j=i;j<=n;j+=i) //sito erastotesa
if(tab[j]==0)
tab[j]=i;


for(int i=0;i<=10;i++)
cout<<tab[i]<<endl;

}

vector<int> RozkladLiczby::CzynnikiPierwsze(int m){
vector<int> tablica;
while(m!=1){
tablica.push_back(tab[m]);
m=m/tab[m];
}
delete [] tab;

return tablica;

}




//////////////////GLOWNY BLOK///////////////////////////////////////

int main(){
RozkladLiczby odp = RozkladLiczby(10);
cout<<"CHECK1"<<endl;

vector<int> p = odp.CzynnikiPierwsze(5);

//for(int i=0;i<=1;i++)
// cout<< p[i] <<endl;



return 0;

}

如果你能帮助我,我将不胜感激。

最佳答案

错误 1

你的构造函数像这样执行内存分配:

int* tab = new int[n+1];

这会将结果放入名为tab局部变量,而不是同名的成员字段。然后,您的构造函数使用此局部变量执行所有操作,并且永远不会初始化成员字段。

因此,您的 CzynnikiPierwsze 是使用未初始化的指针执行的,一旦访问它就会导致未定义的行为。为了使问题复杂化,您甚至尝试在该函数末尾释放这个从未初始化的指针。

错误2

此外,您注释掉的代码中还有另一个错误。初始化后,您的数组将包含 0 0 2 3 2 5 2 7 2 3 2CzynnikiPierwsze 函数在使用 5 调用时将首先 push_back tab[5]5。因此,m 立即变为 1 并返回 vector 。请注意,只执行了一次 push_back

然后您尝试(在您注释掉的代码中)获取 p[0],这是可以的,而 p[1] 不存在,并且,再次,导致未定义的行为 - 或者如果幸运的话会导致异常。

关于c++ - float 异常,段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22578863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com