我用C++編寫了一個程序,但在調試時遇到了一個問題,如果能在本代碼中幫助我,我會很高興。代碼和錯誤在下面被declaired:C++,Error,Native'已退出,代碼爲-1073741819(0xc0000005)
的錯誤是:
Unhandled exception at 0x011019d6 in 33.exe: 0xC0000005: Access violation reading location 0xcdcdcdcd.
的代碼是:
#include <iostream>
#include <string>
using namespace std;
const int maxCard =100;
//enum Boll {false, true};
class Contact
{
public:
Contact (const char *name, const char *address, const char *tell);
//~ Contact(void);
const char* Name (void) const {return name;}
const char* Address (void) const {return address;}
const char* Tell (void) const {return tell;}
friend ostream& operator<< (ostream&, Contact&);
private:
char *name;
char *address;
char *tell;
};
class ContactDir
{
public:
ContactDir(const int maxSize);
//~ContactDir(void);
void Insert(const Contact &);
void Delete(const char *name);
Contact* Find(const char *name);
friend ostream& operator <<(ostream&, ContactDir&);
private:
int Lookup (const char *name);
Contact **contacts;
int dirSize;
int maxSize;
};
Contact::Contact(const char *name, const char *address, const char *tell)
{
Contact::name= new char [strlen(name)+1];
Contact::address= new char [strlen(address)+1];
Contact::tell= new char [strlen(tell)+1];
strcpy(Contact::name, name);
strcpy(Contact::address, address);
strcpy(Contact::tell,tell);
}
/*Contact::~Contact (void)
{
delete name;
delete address;
delete tell;
}*/
ostream &operator<<(ostream &os, Contact &c)
{
os<<"("<<c.name<<","<<c.address<<","<<c.tell<< ")";
return os;
}
ContactDir::ContactDir (const int max)
{
typedef Contact *ContactPtr;
dirSize=0;
maxSize=max;
contacts= new ContactPtr[maxSize];
};
/*ContactDir::~ContactDir (void)
{
for(register int i=0; i<dirSize; ++i)
delete contacts[i];
delete []contacts;
}*/
void ContactDir::Insert (const Contact& c)
{
if (dirSize<maxSize)
{
int idx= Lookup(c.Name());
if(idx>0 &&strcmp(c.Name(), contacts[idx]->Name())==0)
{
delete contacts [idx];
}
else
{
for (register int i=dirSize; i>idx; --i)
contacts[i]=contacts[i-1];
++dirSize;
}
contacts[idx]=new Contact (c.Name(),c.Address(),c.Tell());
}
}
void ContactDir::Delete (const char *name)
{
int idx=Lookup(name);
if(idx<dirSize)
{
delete contacts[idx];
--dirSize;
for (register int i=idx; i<dirSize; i++)
contacts[i]=contacts[i+1];
}
}
Contact *ContactDir::Find (const char *name)
{
int idx= Lookup (name);
return (idx< dirSize && strcmp (contacts[idx]->Name(), name)==0)? contacts[idx]:0;
}
int ContactDir:: Lookup (const char *name)
{
for (register int i=0; i<dirSize; ++i)
if (strcmp (contacts[i]->Name(), name)==0)
return i;
return dirSize;
}
ostream &operator << (ostream &os, ContactDir &c)
{
for (register int i=0; i<c.dirSize; ++i)
os<< *(c.contacts[i]) << '\n';
return os;
}
int main (void)
{
ContactDir dir (10);
dir.Insert(Contact ("JACK","NORWAY", "999999"));
dir.Insert(Contact ("JIMMY","FRANCE", "313131"));
cout<<dir;
}
爲什麼'std :: string'存在時'const char *'無處不在? – vines
您應該在調試器中運行該程序,它會告訴您發生訪問衝突的位置。(在源代碼中的哪一行) – sth
每次在元素數量不確定的情況下都有最大元素數量時,該設計就是犯規。爲什麼不使用標準容器之一? –