Lassen Sie mich zuerst sagen, ich habe keinen Zugriff auf Debugger und ich bin mit Nano als meinen EditorC++ Hexadezimal Multiplikation Segmentation Fault
Derzeit mit meinem Rechner, ich schlage den Kopf gegen einen Ziegel Wand (Segmentierungsfehler). Ich habe versucht, durch meine Hinweise herauszufinden, was mein Problem ist, aber mein Mangel an Erfahrung/Wissen hat mich nur so weit gebracht. Lassen Sie mich erklären, was bisher in meinem Programm funktioniert. Momentan kann ich hexadezimale Zahlen in einer verketteten Liste speichern und sie addieren. Das Problem kommt von meiner Multiplikationsmethode. Irgendwie wird leftNode mitten in der Multiplikationsmethode NULL, was zu einem Segmentierungsfehler führt. Ich frage mich, an welchem Punkt wird leftNode NULL?
Multiplikationsverfahren:
LList Calculator::multiply(LList& left, LList& right) {
LList prodSum;
listnode *leftNode = (left.next());
int zeros = 0;
for(;;) {
if(leftNode == NULL) break;
int lval = leftNode->data;
LList curList;
for(int i = 0; i < zeros; i++) {
curList.insertTail(0);
}
right.reset();
listnode *rightNode = (right.next());
int carry = 0;
while(rightNode != NULL) {
int rval = rightNode->data;
int product = lval * rval + carry;
carry = product/16;
product %= 16;
curList.insertTail(product);
rightNode = (right.next());
}
while(carry) {
curList.insertTail(carry % 16);
carry /= 16;
}
prodSum = *add(prodSum, curList);
leftNode = (left.next()); // eventually causes a segmentation fault
leftNode->data << endl;
++zeros;
}
return prodSum;
}
Klassen zur Multiplikation bezogen werden:
class listnode {
public:
element data;
listnode * next;
};
class LList {
private:
listnode * head;
listnode * tail;
listnode * view;
public:
LList();
~LList();
void read();
listnode* next();
void reset();
void print();
void insertTail(element val);
void clean();
element deleteHead();
};
class Calculator {
public:
Calculator();
//inline LList* add(LList& left, LList& right); works
inline LList multiply(LList& left, LList& right);
};
Calculator::Calculator() {
};
Andere Verfahren zum Durchqueren Knoten verbunden:
listnode* LList::next() {
listnode* temp = view;
if(temp != NULL)
view = view->next;
if(view == NULL) {
}
return temp;
};
void LList::reset() {
view = head;
}
LList::LList(){
head = NULL;
view = NULL;
};
void LList::insertTail(element val) {
listnode * temp;
temp = new listnode;
temp -> data = val;
temp -> next = NULL;
if(head == NULL) {
head = temp;
view = head;
}
else
tail -> next = temp;
tail = temp;
};
void LList::clean() {
while(head != NULL)
deleteHead();
};
element LList::deleteHead() {
listnode * temp;
temp = head;
head = head -> next;
delete temp;
return temp -> data;
};
LList::~LList(){
delete head;
};
Welches Problem? Was ist deine Frage? –
Warum erhalte ich einen Segmentierungsfehler in meiner Multiplikationsfunktion? – Aaron
* Ich habe keinen Zugriff auf Debugger * - Also, wie willst du alles nicht-trivial schreiben? Wirst du das Programm "in deinem Kopf" ausführen, um nach Fehlern zu suchen?Oder erwarten Sie, Programme beim ersten Mal perfekt zu schreiben und brauchen sie nie zu debuggen? Holen Sie sich einen Debugger. – PaulMcKenzie