这是我遇到问题的代码的一部分:
#include<iostream>
using namespace std;
struct ID{
int value;
ID *nxtElement;
};
struct SqLand{
ID *id;
SqLand *next;
};
int main(){
for(int p, i = 0; i < 3; i++){
SqLand *nptr = new SqLand;
cin >> p;
ID *buff = new ID;
buff = nptr->id;
for(int j = 0; j < p; j++){
cin >> buff->value;
//cout << "Garbage";
buff = buff->nxtElement;
}
buff = NULL;
//cout << "WILL";
delete nptr;
delete buff;
}
return 0;
}
问题是在运行此程序并插入p值大于1时,程序会在再输入2次后退出。 例如,从这样开始:
2
1
3
这是程序退出的地方
如果这两个cout语句都未被注释,则输出为:
2
1
Garbage3
GarbageWILL
另一个:
3
1
Garbage2
Garbage
所有程序在各自的最后一行之后退出。我的程序中有什么错误?它是另一个程序的一部分,所以不要指望这个代码片段有任何意义。我只想知道它出了什么问题。
答案 0 :(得分:0)
我能从你的代码中理解这一点......(有了修复)
struct ID {
ID(int val = -1, ID* _nxtElement = NULL) :
value(val), nxtElement(_nxtElement) {
}
int value;
ID *nxtElement;
};
struct SqLand {
SqLand(ID* _id = NULL, SqLand* _next = NULL) :
id(_id), next(_next) {
}
ID *id;
SqLand *next;
};
const int size = 3;
int main() {
SqLand* head = new SqLand;
SqLand* tmp = head;
for (int p, i = 0; i < size; i++) {
cin >> p;
tmp->id = new ID;
ID* tmpID = tmp->id;
for (int j = 0; j < p; j++) {
cin >> tmpID->value;
// avoid unnecessary allocate
if (j < p - 1) {
tmpID->nxtElement = new ID;
tmpID = tmpID->nxtElement;
}
}
// avoid unnecessary allocate
if(i < size - 1) {
tmp->next = new SqLand;
tmp = tmp->next;
}
}
return 0;
}
在您的代码中,您错过了nptr->id
的分配,而您错过了最head
list
SqLand *nptr = new SqLand;
的重要内容。