cout没有打印任何东西到控制台

问题描述 投票:1回答:1

我正在尝试使用cout从动态分配的名为charArray的2D char数组中打印出c字符串。我要打印的片段在这里:

for(int k=0; k<intSize; k++)
{
    std::cout<<"hello"<<std::endl;
    std::cout<<charArray[intSize-1-k]<<std::endl;
}


for(int i = 0; i<intSize; i++)
{
    delete [] charArray[i];
    std::cout<<i<<std::endl;
}
delete [] charArray;

intSizecharArray中有多少个C字符串。然而,当我运行程序时,"hello"被打印一次,没有其他打印,而不是charArray和i在第二个for循环中。我之前在代码中已经确认charArray已成功使用cout正确填充。我运行gdb尝试找到问题,并在gdb中for循环完全迭代,所以由于某种原因在第一个cout后,couts停止工作。我也尝试在每次cout之后冲洗,但仍然是同样的事情。

c++ gdb cout
1个回答
1
投票

试试这个:

#include <iostream>
int main()
{
    const char*nul = nullptr;
    std::cout << "before "<< nul << "after\n";
 }

输出将是:

 before

这就是你发生的事情 - 你正在尝试打印一个nullptr字符串。 charArray[intSize-1-k]之一是null。可能读出它的界限。写一个空字符串会将badbit设置为std::cout

为避免这种情况,您可以做两件事:

  1. 在打印之前验证char*不为null。
  2. std::cout.exceptions(std::ostream::failbit);将使operator<<在违规代码行中抛出异常。调试器可以捕获异常,让您轻松找到您的错误(gdb有catch throw)。如果你有一个异常处理程序,不要忘记让它调用std::cout.clear();
© www.soinside.com 2019 - 2024. All rights reserved.