空数组元素c++

Null array elements c++

本文关键字:c++ 数组元素      更新时间:2023-10-16

我有一个用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++;
       }
       }