问什么dev cpp和visual studio 的运行结果不同?
#include <iostream>using namespace std;
typedef int Elemtype;
struct Node {
Elemtype data;
Node* next;
};
void CreatLinklist(Node* Linklist);
Node*& FindPrevious(Node* head, Node* goal);
Node*& Find(Node* head, int loc);
void Swap(Node* head, Node* f, Node* r);
void PrintLinklist(Node* Linklist);
void DeleteLinklist(Node* head);
int main()
{
Node* Linklist = new Node;
Linklist->next = NULL;
Node* head = Linklist;
CreatLinklist(Linklist);
//PrintLinklist(head);
int f, r;
cout << "请输入要交换的相邻位置:" << endl;
cin >> f >> r;
Swap(head, Find(head, f), Find(head, r));
PrintLinklist(head);
return 0;
}
void CreatLinklist(Node* Linklist)
{
int num;
cout << "请输入元素的个数" << endl;
cin >> num;
Node* p = Linklist;
for (int i = 0; i < num; i++) {
Node* newNode = new Node;
cin >> newNode->data;
p->next = newNode;
p = newNode;
}
p->next = NULL;
}
Node*& FindPrevious(Node* head, Node* goal)
{
Node* p = head;
while (p->next != goal) {
p = p->next;
//cout << "去尼玛的" << endl;
}
return p;
}
Node*& Find(Node* head, int loc)
{
Node* p = head;
for (int i = 0; i < loc; i++) {
p = p->next;
}
return p;
}
void Swap(Node* head, Node* f, Node* r)
{
Node* previous = FindPrevious(head, f);
f->next = r->next;
r->next = f;
if (previous != head) {
previous->next = r;
}
else {
head->next = r;
}
}
void PrintLinklist(Node* Linklist)
{
Node* p = Linklist->next;
cout << "以下是所有元素:" << endl;
while (p) {
cout << p->data << endl;
cout << "去尼玛的" << endl;
getchar();
getchar();
p = p->next;
}
}
void DeleteLinklist(Node* head)
{
Node* p = head->next;
while (p) {
Node* tmp = p;
p = p->next;
delete tmp;
}
delete head;
}
有大佬能帮我解释一下为什么同一段代码,在dev cpp和visual studio 中运行的结果不同吗?(压缩文件里面是对比的照片) Dev C++和Visual Studio是两个不同的集成开发环境,它们可能会在一些细节上有所不同,包括编译器版本、标准库版本等。因此,某些代码可能在Dev C++中可以正常运行,但在Visual Studio中运行时可能出现不同的结果或错误。
对于这段代码来说,在两个环境中的运行结果应该是相同的,因为它没有使用任何与IDE相关的函数或特性。
不过,您提供的代码中有一些问题:
1. 在Swap函数中,将f的next指针指向了r,但却没有将r的next指针指向f。这可能导致链表断裂。
2. 在FindPrevious函数中,有一个未关闭的while循环。
3. PrintLinklist函数没有实现。
我修正了以上问题,并添加了PrintLinklist函数的实现:
#include <iostream>
using namespace std;
typedef int Elemtype;
struct Node {
Elemtype data;
Node* next;
};
void CreatLinklist(Node*& Linklist);
Node*& FindPrevious(Node* head, Node* goal);
Node*& Find(Node* head, int loc);
void Swap(Node* head, Node* f, Node* r);
void PrintLinklist(Node* Linklist);
void DeleteLinklist(Node* head);
int main()
{
Node* Linklist = new Node;
Linklist->next = NULL;
Node* head = Linklist;
CreatLinklist(Linklist);
int f, r;
cout << "请输入要交换的两个位置:";
cin >> f >> r;
Swap(head, Find(head, f), Find(head, r));
PrintLinklist(head);
DeleteLinklist(head);
return 0;
}
void CreatLinklist(Node*& Linklist)
{
int num;
cout << "请输入链表的长度:";
cin >> num;
Node* p = Linklist;
for (int i = 0; i < num; i++) {
Node* newNode = new Node;
cout << "请输入第" << i + 1 << "个节点的值:";
cin >> newNode->data;
p->next = newNode;
p = newNode;
}
p->next = NULL;
}
Node*& FindPrevious(Node* head, Node* goal)
{
Node* p = head;
while (p->next != goal) {
p = p->next;
}
return p;
}
Node*& Find(Node* head, int loc)
{
Node* p = head->next;
for (int i = 1; i < loc; i++) {
if (p == NULL) {
break;
}
p = p->next;
}
return p;
}
void Swap(Node* head, Node* f, Node* r)
{
if (f == NULL || r == NULL || f == r) {
return;
}
Node* previousF = FindPrevious(head, f);
Node* previousR = FindPrevious(head, r);
Node* nextF = f->next;
Node* nextR = r->next;
if (previousF != head) {
previousF->next = r;
}
else {
head->next = r;
}
if (previousR != head) {
previousR->next = f;
}
else {
head->next = f;
}
f->next = nextR;
r->next = nextF;
}
void PrintLinklist(Node* Linklist)
{
Node* p = Linklist->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void DeleteLinklist(Node* head)
{
Node* p = head->next;
while (p != NULL) {
Node* temp = p;
p = p->next;
delete temp;
}
delete head;
}
希望对您有所帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 Reference to stack memory associated with local variable 'p' returned [-Wreturn-stack-address]
Node*& FindPrevious(Node* head, Node* goal)
{
Node* p = head;
while (p->next != goal) {
p = p->next;
//cout << "去尼玛的" << endl;
}
return p;
}
Node*& Find(Node* head, int loc)
{
Node* p = head;
for (int i = 0; i < loc; i++) {
p = p->next;
}
return p;
}
页:
[1]