我正在为我的课程定义一个构造函数。基本上,我想接受输入并将其写入成员变量(数组)。
class DynArray
{
int m_size;
int* m_p_array;
public:
DynArray(){
std::cout << "Please enter size\n";
std::cin >> m_size;
m_p_array[m_size];
for (int i{ 0 }; i < m_size; i += 1) {
std::cout << "Please enter element " << i << "\n";
std::cin >> m_p_array[i]; //"Exception thrown" message shows in this line
}
}
}
VS2019向我显示为警告代码: C26495变量'DynArray :: m_p_array'未初始化。始终初始化成员变量
我只搜索了1个小时,但没有弄清楚我的错误是什么。我将指针用于“ m_p_array”问题吗?提前致谢。
答案 0 :(得分:3)
这不是为数组分配内存的方式:
m_p_array[m_size];
您需要执行以下操作:
m_p_array = new int[m_size];
之后,您需要释放析构函数中的内存:
delete[] m_p_array;
但是请考虑使用std::vector
,因为这样会更好。
答案 1 :(得分:3)
在c ++中,动态数组通过new
关键字分配,如下所示:
m_p_array = new int[m_size];
不要忘记删除此内存,通常是在析构函数中。您还应该正确实现特殊成员函数。这是一个reference,用于说明如何解决此问题。
请注意:
m_p_array[m_size];
只是索引到数组中,并且不声明或初始化任何东西。
由于您从未初始化m_p_array
,因此您正在访问内存,这是未定义的行为。
答案 2 :(得分:0)
没有弄清楚我的错误是什么
警告消息中有错误:
变量'DynArray :: m_p_array'未初始化。始终初始化成员变量
这里:
std::cin >> m_p_array[i];
您通过未初始化的指针进行间接操作,并尝试分配指向对象的同级对象,这将导致未定义的行为。
您可以通过初始化成员变量来解决此问题。您可以使用默认的成员初始化程序,也可以使用成员初始化列表来完成此操作。
基本上我想接受输入并将其写入成员变量(数组)。
实际上,成员变量不是数组。它是一个指针。也许这就是问题的根源。也许您应该改用数组成员。