Also das Problem ist, wenn das Programm den Zeiger newOwner erstellt, es plötzlich nicht mehr funktioniert.C++: Beim Erstellen des neuen Zeigers für die Klasse aufhören zu arbeiten Besitzer #fixed
Bearbeiten Danke für den Hinweis, der Code funktioniert und bereits behoben. #include #include #include #include
using namespace std;
class Owner
{
protected:
int idNum;
char name[255];
char add[255];
public:
Owner()
{
idNum=0;
strcpy(name, "");
strcpy(add, "");
};
Owner(int id, char *n, char *a)
{
idNum=id;
strcpy(name, n);
strcpy(add, a);
};
~Owner()
{};
int getIdNum()
{
return idNum;
};
void setIdNum(int id)
{
idNum=id;
};
char *getName()
{
return name;
};
void setName(char *n)
{
strcpy(name, n);
};
char *getAdd()
{
return add;
};
void setAdd(char *a)
{
strcpy(add, a);
};
Owner *nextOwner=NULL;
};
Owner *headOwner=NULL;
void addOwner()
{
char names [255], addrs[255];
int numId;
cout<<"variable"<<endl;
Owner *newOwner = new Owner();
cout<<"new pointer for newOwner"<<endl;
Owner *copyOwner = new Owner();
cout<<"new pointer for copyOwner"<<endl;
newOwner -> nextOwner=NULL;
copyOwner -> nextOwner=NULL;
cout<<"pointing"<<endl;
cout<<"New Boat Owner Form"<<endl;
cout << "Enter Your Name: ";
gets(names);
newOwner -> setName(names);
cout << "Enter Your Address: ";
gets(addrs);
newOwner -> setAdd(addrs);
if(headOwner == NULL)
{
numId=1;
newOwner -> setIdNum(numId);
headOwner=newOwner;
}
else
{
int i;
copyOwner=headOwner;
while(copyOwner!=NULL)
{
if(i<copyOwner -> getIdNum())
{
i=copyOwner -> getIdNum();
copyOwner = copyOwner->nextOwner;
}
}
numId=i+1;
copyOwner=headOwner;
while(copyOwner->nextOwner != NULL)
{
copyOwner=copyOwner->nextOwner;
}
copyOwner->nextOwner=newOwner;
}
}
int main()
{
addOwner();
return 0;
}
, bevor das Programm funktioniert nicht mehr, wir einen Ausgang für die Suche nach den Fehler gemacht, die „Variable“ -Ausgang angezeigt wird, dann ist Programm stoppen danach arbeiten. kann den Fehlerabschnitt nicht finden.
Bitte helfen Sie mir, die Fehlerquelle zu finden. Danke.
'Owner :: name' und' Owner :: add' werden in 'Owner :: Owner()' baumelt. 'strcpy()' auf ihnen führt zu UB. – songyuanyao
Warum 'char *' und nicht 'string'? Nach Methoden müssen Sie kein ';' – user463035818