二代大蘑菇 2021-06-08 23:09 采纳率: 0%
浏览 26

怎么解决.........

#include <iostream>

using namespace std;

struct index
{
	void show()
	{
		cout << "123" << endl;
	}

};

template<class T>
class A
{
public:

	//构造初始化
	A()
	{
		arr = new T[10];
	}

	void pintf()
	{
		if (0)
		{

            //这里出了问题,但是不想删除
			arr[1].show();
		}
		else
		{
			cout << "..." << endl;
		}
		
	}

private:
	T* arr;

};

int main()
{

	A<int> a1;
	a1.pintf();


	cin.get();
}

 

  • 写回答

3条回答 默认 最新

  • 「已注销」 2023-03-17 11:38
    关注

    参考GPT和自己的思路:

    根据上面提供的代码,我们可以看到,在类模板A中定义了一个私有成员变量T* arr以及一个函数pintf(),在pintf()函数中,会判断一个条件,如果为0,会调用arr数组的第1个元素的show()函数,否则输出"..."。

    但是,我们可以看到,在构造函数中,并没有对arr指针进行动态内存分配,这就导致了在pintf()函数中,如果访问arr[1]的话,就会出现未定义行为,因为arr指针没有指向任何有效的内存空间。

    因此,为了解决这个问题,我们需要在构造函数中对arr进行动态内存分配,例如:

    A() {
        arr = new T[10];
    }
    

    或者,可以在类模板A中添加一个析构函数,在其中释放arr指针指向的内存空间,例如:

    ~A() {
        delete[] arr;
    }
    

    这样,在使用完arr指针后,可以及时将其指向的内存空间释放,避免内存泄漏问题。

    评论

报告相同问题?