记一次C++踩坑,for循环变量地址以及类的实例化

在做牛客网这个题目时遇到了一个奇怪的现象,for循环中初始化对象一直是一个地址,所以链表被指的乱七八糟,造成死循环,在此记录
答案参考这位大神

#include<iostream>

using namespace std;

class LinkList {
public:
    LinkList(int _num) : num(_num), next(NULL) {}
    int num;
    LinkList *next;
};

int main() {
	LinkList *head = NULL, *prev;
    int m;
	cin >> m;
	int nums[m];
	for(int i = 0; i < m; ++i)
		cin >> nums[i];
	for(int i = 0; i < m; ++i)
	{
		for(int n = 1; n <= nums[i]; ++n)
		{
			// 一开始我这样初始化变量,程序一直死循环,打印地址后发现每次l的地址都是一样的
			// LinkList l(n);
			// 改成这样初始化之后就解决了问题
			LinkList *l = new LinkList(n);
			if(head == NULL)
				head = l;
			else
				prev->next = l;
            l->next = NULL;
			prev = l;
		}
		prev->next = head;
		while(head->next != head){
	        for(int i = 1; i < 3; ++i)
	        {
	            // 向前一步
	            prev = prev->next;
	            // 向前一步
	            head = head->next;
	        }
	        cout << head->num << " ";
	        // 向前一步
	        head = head->next;
	        // 闭合
	        prev->next = head;
	    }
	    cout << head->num << endl;
	    head = NULL;
	}
	return 0;
}

总结:

  • 动态初始化n个对象使用new方式创建
  • 代码中创建单个对象使用ClassName varName方式

猜你喜欢

转载自blog.csdn.net/csdn_meng/article/details/88190026