空数组元素c++
Null array elements c++
我有一个用c++编写的银行系统应用程序,它包括一个指向对象的指针数组。该程序在使用Ubuntu 12.04时似乎可以工作,但在Windows中运行时,当数组中只有一个对象时,它会崩溃。
if(tempPtr->getAccount()->hasCustomer() == true)
{
while(tempPtr->getAccount()->getCustomer()[i] && i<4)
{
tempPtr->getAccount()->getCustomer()[i]->showCustomerDetail();
i++;
}
//...
我有一个类似的数组,但字符串在为空时会打印出"1.66912-e-307-",但只要我添加一个字符串就可以工作。
任何帮助都将不胜感激感谢
行
while(tempPtr->getAccount()->getCustomer()[i] && i<4)
有鱼腥味。使其
while(i<4 && tempPtr->getAccont()->getCustomer()[i])
以避免未定义的行为(如果数组的大小为4)。
您没有检查边界。请确保您始终在读取为数组分配的内存。使用valgrind或类似的方法来确保你不会遇到这样的问题。
如果没有,在实践中,您将退出数组并读取随机数据,或者超出分配的内存并使程序崩溃。确切的行为在标准中是未定义的,取决于平台/编译器的组合,但这总是一个坏兆头。
这两个操作系统之间有几个区别,但与字符有关,Windows上的unicode是UTF-16LE,每个字符是2或4个字节。Linux使用UTF-8,每个字符都在1到4个字节之间。
这是一篇很好的文章,可能有助于绝对最小值每个软件开发人员绝对,积极地必须知道Unicode和字符集(没有借口!)
我已经用一个简单的修复程序解决了这个问题。为了能够在Windows上正确运行它,我刚刚更改了。。。
if(tempPtr->getAccount()->hasCustomer() == true)
{
while(tempPtr->getAccount()->getCustomer()[i+1] && i<4)
{
tempPtr->getAccount()->getCustomer()[i]->showCustomerDetail();
i++;
}
}
相关文章:
- 数组元素打印的递归方法
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 数组元素更改值?
- 如何访问宏中定义的数组元素
- 将数组元素递增 1
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 存储指向动态数组元素的指针
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在 std::map 中插入数组元素
- 使用指针访问数组元素时出现意外结果
- c++ 使用动态分配运算符反向数组元素
- 为什么在 c++ 中分配 char 数组元素时,分配的字符会被销毁?
- 缺少数组元素问题
- 如何在类中制作 2D 数组元素,然后在其构造函数中指定其维度?
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 删除在结构 c++ 中声明的数组元素
- Getter 和 Setter 用于类 C++ 中的数组元素
- 尝试递归获取数组元素的总和
- 使用SWIG将numpy数组元素(int)传递给c++int