我已经解析了出问题的代码 以下代码定义了带向量的2D数组。然后打印2D数组。当我使用调试模式运行它时,它会打印正确的答案,但是当我在没有调试的情况下运行它时(即释放模式)。有时它打印整个2D数组,有时打印它的一部分,然后只是退出而没有任何消息。为什么会这样?谢谢!。
运行环境:
Windows 10版本:10.0.16299.125
Clion 2017.3
Mingw64 5.0
Clion的CmakeLists.txt:
cmake_minimum_required(VERSION 3.8)
项目(测试)
设定(CMAKE_CXX_STANDARD 11)
设置(SOURCE_FILES main.cpp)
add_executable(Test $ {SOURCE_FILES})
#include <vector>
#include <iostream>
using namespace std;
int main()
{
vector<vector<int>> graph{{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}};
for(int i = 0; i < graph.size(); i++)
{
for(int j = 0; j < graph[i].size(); j++)
{
cout << i << "-" << j << ": "<< graph[i][j] << endl;
}
cout << endl;
}
return 0;
}
输出不稳定,有时成功,有时失败,以下是两个错误的输出 第一个错误的输出:
E:\coding\LCCPP\Test\cmake-build-debug\Test.exe
0-0: 0
0-1: 4
0-2: 0
0-3: 0
0-4: 0
0-5: 0
0-6: 0
0-7: 8
0-8: 0
1-0: 4
1-1
1-1:
Process finished with exit code 0
第二个错误输出:
E:\coding\LCCPP\Test\cmake-build-debug\Test.exe
0-0: 0
0-1: 4
0-2: 0
0-3: 0
0-4: 0
0-5: 0
0-6: 0
0-7: 8
0-8: 0
1-0: 4
1-1: 0
1-2: 8
1-3: 0
1-4: 0
1-5: 0
1-6: 0
1-7: 11
1-8: 0
2-0: 0
2-1: 8
2-2: 0
2-3: 7
2-4: 0
2-5: 4
2-6: 0
2-7: 0
2-8: 2
3-0: 0
3-1: 0
3-2: 7
3-3: 0
3-4: 9
3-5: 14
3-6: 0
3-7: 0
3-8: 0
4-0: 0
4-1: 0
4-2: 0
4-3: 9
4-4: 0
4-5: 10
4-6: 0
4-7: 0
4-8: 0
5-0: 0
5-1: 0
5-2: 4
5-3: 14
5-4: 10
5-5: 0
5-6: 2
5-7: 0
5-8: 0
6-0: 0
6-1: 0
6-2: 0
6-3: 0
6-4: 0
6-5: 2
6-6: 0
6-7: 1
6-8: 6
7-0: 8
7-1: 11
7-2: 0
7-3: 0
7-4: 0
7-5: 0
7-6: 1
7-7: 0
7-8: 7
8-0: 0
8-1: 0
8-2: 2
8-3: 0
8-4: 0
8-5: 0
8
Process finished with exit code 0
正确的输出:
E:\coding\LCCPP\Test\cmake-build-debug\Test.exe
0-0: 0
0-1: 4
0-2: 0
0-3: 0
0-4: 0
0-5: 0
0-6: 0
0-7: 8
0-8: 0
1-0: 4
1-1: 0
1-2: 8
1-3: 0
1-4: 0
1-5: 0
1-6: 0
1-7: 11
1-8: 0
2-0: 0
2-1: 8
2-2: 0
2-3: 7
2-4: 0
2-5: 4
2-6: 0
2-7: 0
2-8: 2
3-0: 0
3-1: 0
3-2: 7
3-3: 0
3-4: 9
3-5: 14
3-6: 0
3-7: 0
3-8: 0
4-0: 0
4-1: 0
4-2: 0
4-3: 9
4-4: 0
4-5: 10
4-6: 0
4-7: 0
4-8: 0
5-0: 0
5-1: 0
5-2: 4
5-3: 14
5-4: 10
5-5: 0
5-6: 2
5-7: 0
5-8: 0
6-0: 0
6-1: 0
6-2: 0
6-3: 0
6-4: 0
6-5: 2
6-6: 0
6-7: 1
6-8: 6
7-0: 8
7-1: 11
7-2: 0
7-3: 0
7-4: 0
7-5: 0
7-6: 1
7-7: 0
7-8: 7
8-0: 0
8-1: 0
8-2: 2
8-3: 0
8-4: 0
8-5: 0
8-6: 6
8-7: 7
8-8: 0
Process finished with exit code 0
答案 0 :(得分:0)
代码没有实际问题,很可能是IDE没有提供输出的问题。基本上你的程序在控制台中打印整个管道缓冲区之前退出。当子进程退出时,管道关闭而没有任何错误,并且父进程无需打印。如果你最后暂停程序会怎么样?
虽然不提供&#34;返回&#34;在非空函数中,mingw将相等的return 0;
添加到main()...
PS:考虑使用范围:
int main()
{
using namespace std;
vector<vector<int>> graph{{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}};
for(auto &line: graph)
{
int i = 0, j= 0;
for(auto v : line )
{
cout << i << "-" << j << ": "<< v << endl;
j++;
}
i++;
cout << endl;
}
return 0;
}
答案 1 :(得分:0)
也许可以通过添加std::flush
:
for(auto v : line )
{
cout << i << "-" << j << ": "<< v << endl << flush;
j++;
}
它会“强迫”#39;所有产出。 BTW在我看来是代码优化的一些问题。