插入数组时发生写访问冲突

时间:2020-06-09 18:26:42

标签: c++ arrays

我正在为我的课程定义一个构造函数。基本上,我想接受输入并将其写入成员变量(数组)。

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”问题吗?提前致谢。

3 个答案:

答案 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];

您通过未初始化的指针进行间接操作,并尝试分配指向对象的同级对象,这将导致未定义的行为。

您可以通过初始化成员变量来解决此问题。您可以使用默认的成员初始化程序,也可以使用成员初始化列表来完成此操作。

基本上我想接受输入并将其写入成员变量(数组)。

实际上,成员变量不是数组。它是一个指针。也许这就是问题的根源。也许您应该改用数组成员。

相关问题