私はJavaプログラマですが、今ではC++で少しのコードを書く必要があります。私は数年前にC++の基礎を学んだので、私は本当にうまくいきません。C++ mallocエラー
私は、多項式を記述する小さなクラスを書いています。ここでは、次のとおりです。
#include "Polynom.h"
#include <iostream>
using namespace std;
Polynom::Polynom()
{
this->degree = 0;
this->coeff = new int[0];
}
Polynom::Polynom(int degree)
{
this->degree = degree;
this->coeff = new int[degree + 1];
}
Polynom::~Polynom()
{
delete coeff;
}
void Polynom::setDegree(int degree)
{
this->degree = degree;
}
void Polynom::setCoeffs(int* coeff)
{
this->coeff = &*coeff;
}
void Polynom::print()
{
int i;
for(i = degree; i >= 0; i --)
{
cout<<this->coeff[i];
if(i != 0)
cout<<"x^"<<i;
if(i > 0)
{
if(coeff[i - 1] < 0)
cout<<" - ";
else
cout<<" + ";
}
}
}
さて、私は度と多項式の係数を読み込み、コンソールにそれを印刷してみました。ここにそのコードがあります:
#include <iostream>
#include "Polynom.h"
using namespace std;
int main()
{
int degree;
cout<<"degree = ";
cin>>degree;
int* coeff = new int[degree];
int i;
for(i = 0; i <= degree; i++)
{
cout<<"coeff[x^"<<i<<"] = ";
cin>>coeff[i];
}
Polynom *poly = new Polynom(degree);
//poly->setDegree(degree);
poly->setCoeffs(coeff);
cout<<"The input polynome is: ";
poly->print();
return 0;
}
コードをコンパイルするとすべてが問題ありません。走っているときににもの度合いを与え、いくつかの係数を与えると、プログラムは正常に実行されます。 しかし:私は(例えば、3または5用)奇数度を定義し、係数を与える場合、プログラムはpolynomeを印刷すると、次のエラーを返しません。
malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
これはなぜ起こるのでしょうか?アレイに十分なメモリを割り当てられなかったのはどこですか?私はこのエラーのためにグーグルとthis pageにつまずいたが、そこに記載されている解決策は私にはあまり役に立たなかった。
私のコードに別の問題があるかもしれませんか?私は本当にあなたの助けに感謝します。
ありがとうございます。あなたのmain()
機能で
ヘッダーファイルを投稿できますか? –
デストラクタで 'delete [] coeff'を実行する必要があります。 'std :: vector'( 'degree'メンバもなくなります)を使用してください。 –
また、ポリを削除してください。 –