空数组元素c ++

时间:2013-12-03 21:35:47

标签: c++ arrays

我有一个用c ++编写的银行系统应用程序,它包含一个指向对象的指针数组。该程序似乎在使用Ubuntu 12.04时有效,但是当在阵列中只有一个对象的情况下在以下循环中运行时,它会崩溃。

if(tempPtr->getAccount()->hasCustomer() == true)
{
  while(tempPtr->getAccount()->getCustomer()[i] && i<4)
  {
    tempPtr->getAccount()->getCustomer()[i]->showCustomerDetail();
    i++;
  }
//... 

我有一个类似的数组,但是当它是空的时打印出“1.66912-e-307 - ”的字符串,但是在我添加字符串后立即工作。

任何帮助将不胜感激 感谢

4 个答案:

答案 0 :(得分:2)

该行

while(tempPtr->getAccount()->getCustomer()[i] && i<4)

很可疑。做到这一点

while(i<4 && tempPtr->getAccont()->getCustomer()[i])

以避免未定义的行为(如果数组的大小为4)。

答案 1 :(得分:1)

你没有检查边界。确保您始终读取为阵列分配的内存。使用valgrind或类似的东西确保你没有这样的问题。

如果没有,实际上,您将退出阵列并读取随机数据,或者在分配的内存之外跳过并使程序崩溃。标准中的确切行为是未定义的,取决于平台/编译器的组合,但它始终是一个不好的标志。

答案 2 :(得分:0)

两个操作系统之间存在一些差异,但与字符相关,Windows上的unicode为UTF-16LE,每个字符为2或4个字节。 Linux使用UTF-8,每个字符在1到4个字节之间。

这是一篇很好的文章,可能有帮助The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

答案 3 :(得分:0)

我已经成功解决了这个问题。为了能够在Windows上正确运行它,我刚刚改变了......

    if(tempPtr->getAccount()->hasCustomer() == true)
    {
       while(tempPtr->getAccount()->getCustomer()[i+1] && i<4)
       {
          tempPtr->getAccount()->getCustomer()[i]->showCustomerDetail();
          i++;
       }
       }