访问动态2D字符数组C++
Accessing dynamic 2D char array C++
在我的课上,我有:
private:
//...
char** mNumber;
//...
然后我在构造函数中初始化它:
PhoneBook::PhoneBook()
{
mNumber = NULL;
}
我也有方法设置默认值:
bool PhoneBook::setDefault()
{
lock();
//...
for (uint8 i = 0; i < 5; ++i)
{
mNumber[i] = new char[5];
for (uint8 k = 0; k < 4; ++k)
{
mNumber[i][k] = '0' + k;
}
mNumber[i][4] = ' ';
}
unlock();
return true;
}
在我的程序中,当我想写数字时(我最多可以写五个数字),程序应该使用方法:
bool PhoneBook::write(DataOutputStream& s)
{
lock();
//...
unsigned long checksum = 0;
for (uint8 j = 0; j <5; j++)
{
unsigned short k = 0;
do
{
char number= mUserNo[j][k];
checksum += 0x000000FF & (number>> 8); //checksum is not problem here I guess
checksum += 0x000000FF & (number);
s.write_int8(userNo);
} while(mNumber[j][k++]==' ');
}
s.write_uint32(checksum);
s.flush();
unlock();
return (s.ok());
}
它在线路上崩溃:
char userNo = mUserNo[j][k];
它也不设置默认值(它们不会显示在应用程序窗口中应该显示的位置)
Visual Studio 2010提示:
Unhandled exception at 0x012b6fb8 (main_app.exe) in main_app: 0xC0000005: Access violation reading location 0xfdfdcdcd.
我试过调试它,但找不到问题所在。我只能猜测2d数组有问题,因为我对它们感觉不太好,当我尝试过与1D类似的东西时,效果很好
请帮助我编写代码,让我更好地理解c++中的多D数组
顺便说一句,我不允许使用std::string。只是不,我不能在这里使用它。
您只能将mNumber设置为NULL,因此通过mNumber(例如mNumber[j][k])对内存的任何访问都很可能因访问违规而崩溃(1)。您需要通过在某个地方使用new
,将mNumber初始化为一个有意义的值!更好的是,使用std::vector
:这样的标准容器
// the declaration of mNumber, do not initialise mNumber to NULL!
std::vector <char *> mNumber; // only need one * here!
(1) 这是在Windows和Linux上最常见的事情,一些(但不是很多)操作系统/系统可能会悄悄地让你这么做!
如果您需要"char**"而不是std::vector,则应该在填充默认值之前为其分配内存。像这样,
bool PhoneBook::setDefault()
{
........
mNumber = new char*[5]; // allocating memory for mNumber
for (uint8 i = 0; i < 5; ++i)
{
mNumber[i] = new char[4];
for (uint8 k = 0; k < 4; ++k)
{
mNumber[i][k] = '0' + k;
}
mNumber[i][4] = ' ';
}
unlock();
return true;
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '