刪除我需要一些幫助運營商new
和delete
運營商新的C++
我試圖創建一個名爲大來處理龐大的數字
#include <iostream>
using namespace std;
class big
{
protected:
char *a;
long lenght,maxlenght;
public:
big()
{
maxlenght=256;
a=new char[maxlenght];
memset(a,'\0',maxlenght);
}
void read();
void set_maxlenght(long x);
long msize();
long size();
char* return_big();
long at(long poz);
char* operator[](long poz);
void operator=(big x);
void modify (long poz,long val);
void dec (long poz);
void inc (long poz);
void operator-(big x);
int compare(big x);
};
//functions
void write(big x)
{
char *ptr;
ptr=x.return_big();
cout<<ptr;
}
//class big
void big::read()
{
char *buffer;
buffer=new char[maxlenght];
memset(buffer,'\0',maxlenght);
cin>>buffer;
delete[] a;
a=new char[strlen(buffer)];
memset(a,'\0',maxlenght);
for(long i=0;i<(long)strlen(buffer);i++)
a[i]=buffer[i];
lenght=strlen(buffer);
delete[] buffer;
}
void big::set_maxlenght(long x)
{
maxlenght=x;
}
long big::msize()
{
return maxlenght;
}
long big::size()
{
return lenght;
}
char* big::return_big()
{
char *x;
x=a;
return x;
}
long big::at(long poz)
{
if(poz>=lenght)
return -1;
else
return this->a[poz];
}
char* big::operator[](long poz)
{
if(poz>=lenght)
return NULL;
else
return a+poz;
}
void big::operator=(big x)
{
a=new char[x.size()];
for(long i=0;i<(long)strlen(x.a);i++)
this->modify(i,x.at(i));
this->lenght=strlen(x.a);
}
void big::modify (long poz,long val)
{
a[poz]=(char)val;
}
void big::dec (long poz)
{
if(a[poz])
a[poz]--;
}
void big::inc (long poz)
{
if(a[poz]<255)
a[poz]++;
}
void big::operator-(big z)
{
long n,m,i,j,aux;
big rez,x,y;
if(compare(z))
{
x=*this;
y=z;
}
else
{
y=*this;
x=z;
}
n=x.size();
m=y.size();
i=n;
j=m;
while(j>=0)
{
if(x.at(i)<0)
{
x.modify(i-1,x.at(i-1)+x.at(i));
x.modify(i,0);
}
aux=x.at(i)-y.at(j);
if(aux<0)
{
x.dec(i-1);
rez.modify(i,aux+10);
}
else
rez.modify(i,aux);
}
while(i)
{
i--;
if(x.at(i)<0)
{
x.modify(i-1,x.at(i-1)+x.at(i));
x.modify(i,0);
}
rez.modify(i,x.at(i));
}
}
int big::compare(big x)
{
return strcmp(this->a,x.return_big());
}
int main()
{
big a,b;
a.read();
b.read();
write(a);
endl(cout);
write(b);
return 0;
}
第一次讀是確定類,但第二個有此錯誤時,它要執行a=new char[strlen(buffer)]
:
---Windows has triggered an error in MyProject.exe
This may be due to the corruption of the heap, which indicates a bug in MyProject.exe or any DLLs it has loaded.
This may also be due to the user pressing F12 while MyProject.exe has focus.
The output window may have more diagnostic information.---
也有兩個按鈕和continue。
如果我按下去它表明我:
Unhandled exception at 0x77b8380e in Olimpiada a IX-a.exe: 0xC0000374: A heap has been corrupted.
我不是很有經驗的指針(6個月)。我會很感激任何答案。
您需要在長度上添加1以容納尾部'NUL'字符。或者使用'strdup()'或'std :: string'對象。 – trojanfoe 2012-02-04 08:16:57
*注意:當你想使用大量的數據庫時,試試''NTL'庫http://www.shoup.net/ntl/ * – Vyktor 2012-02-04 08:18:16
你不應該在這段代碼中使用指針。你應該使用'std :: vector'。我覺得我應該推薦你[一本好的入門C++書](http://stackoverflow.com/q/388242/46642)。 – 2012-02-04 08:20:11