c++ - cout 不向控制台打印任何内容

标签 c++ gdb cout

我正在尝试使用 cout 从名为 charArray 的动态分配的二维字符数组中打印出 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 也不是第二个 for 循环中的 i 。我之前已经在我的代码中确认 charArray 已通过成功使用 cout 正确填充。我运行 gdb 试图找出问题所在,在 gdb 中,for 循环完全迭代,所以出于某种原因,在第一个 cout 之后,cout 停止工作。我也尝试在每次 cout 后刷新,但还是一样。

最佳答案

试试这个:

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

输出将是:

 before

这就是发生在你身上的事情——你正试图打印一个 nullptr 字符串。 charArray[intSize-1-k]之一一片空白。可能越界读取它。写入空字符串会将 badbit 设置为 std::cout .

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

  1. 验证 char*在打印之前不为空。

  2. std::cout.exceptions(std::ostream::failbit);将使operator<<在有问题的代码行抛出异常。调试器可以捕获异常,让您轻松找到错误(gdb 有 catch throw )。如果您有异常处理程序,请不要忘记让它调用 std::cout.clear(); .

关于c++ - cout 不向控制台打印任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165061/

相关文章:

c++ - 为什么我在使用 for 循环和 cout 命令时没有打印出 vector

c++ - 最多打印 4 位小数

C++单元测试检查输出是否正确

c++ - Int 值奇怪地类似于指针

c++ - 控制到达非空函数的结尾在 xcode 上是错误的,但在 gcc 上不是错误

crash - 如何了解gdb的反汇编代码输出

python - 使用命名管道根据输出将输入发送到程序

C++ - 荒谬的长距离

c++ - 如何将算术运算符传递给模板?

gdb - 在 GDB 中设置断点