我有一个基本的c ++练习。我需要将一些列出的单词传递给char矩阵,但我在初始化矩阵时遇到问题...
这是我的代码:
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
}
}
}
我得到了&#34; EAccess违规&#34;错误... 我 cant 使用字符串,必须是char或AnsiString(c ++ builder)。 我不知道我是否甚至宣称char矩阵是好的。 我的想法是这样的:
{'H','e','l','l','o', ,
'W','o','r','l','d', ,
, , , , , ,
, , , , , , }
(只是为了提出想法)
http://pastebin.com/gBQvED5h&lt; - 完整代码(西班牙语警告)
答案 0 :(得分:2)
在类构造函数的开头,您应该具有以下内容以分配数组存储,
palabra = new char*[rows];
for (std::size_t i = 0; i < rows; ++i)
palabra[i] = new char[cols];
其中rows
和cols
分别代表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;
};