初始化字符矩阵时出现 EAccess 冲突

EAccess Violation when initializing char matrix

本文关键字:EAccess 冲突 字符 初始化      更新时间:2023-10-16

我有一个基本的 c++ 练习。我需要将一些列出的单词传递给字符矩阵,但我在初始化矩阵时遇到问题......

这是我的代码:

class Cahorcado
{
    public:
        //functions
        Cahorcado(void);
        private:
        char** palabra;
};        
Cahorcado::Cahorcado(void)
{
    for(int i=0;i<26;i++)
    {
        for(int i2=0;i2<255;i2++)
        {
            palabra[i2][i]=' '; //i'm getting the error over here
        }
    }
}

我收到"EAccess 冲突"错误...我不能使用字符串,必须是char的或AnsiString的(c ++生成器)。我不知道我什至是否宣布字符矩阵很好。我想到的是这样的:

{'H','e','l','l','o', , 
 'W','o','r','l','d', , 
  , , , , , , 
  , , , , , , }

(只是为了出主意)

http://pastebin.com/gBQvED5h <-完整代码(西班牙语警告

在类构造函数的开头,你应该有以下内容来分配数组存储,

palabra = new char*[rows];
for (std::size_t i = 0; i < rows; ++i)
    palabra[i] = new char[cols];

其中rowscols分别表示 2D 数组中的行数和列数。

然后在您的析构函数中,您将需要,

for (std::size_t i = 0; i < rows; ++i)
    delete[] palabra[i];
delete[] palabra;

为了破坏动态分配的内存并避免内存泄漏。

以上是相当过时的C++,更好的方法是通过内部处理内存分配和取消分配的 STL 容器。例如,您可以使用 std::vector<std::vector<char>> 对象来存储字符矩阵,然后您的类将如下所示:

class Cahorcado {
public:
    // create char matrix with each element initialised with ' '
    Cahorcado(std::size_t rows, std::size_t cols) 
        : palabra(rows, std::vector<char>(cols,' ')) {}
private:
    std::vector<std::vector<char>> palabra;
};