程序在退出(0)后似乎继续运行
program appears to continue running after exit (0)
在运行时,程序从命令行获取一个或多个参数,每个参数都是要打开的文件名。
argc ==文件名的个数
argv[0] ==程序名
argv[n],其中n是一个整数==一个给定的文件名,根据它们从命令行传递的顺序。
next_file进入下一个要编辑的文件。它增加n,并在n大于argc时退出;因为这意味着最后一个文件已经被访问过了。否则,它将调用file_handler。
file_handler接受一个流对象[file]、一个字符串[name]和一个布尔变量[open]。如果open为0,则关闭当前文件。如果open为1,则以[file]打开[name]。
当调用next_file时,预期的行为是关闭当前打开的文件,将[n]向前推进一个,然后打开下一个文件。在尝试打开一个不存在的文件之前,它应该退出。
函数正常工作,直到到达最后一个文件,此时抛出调试断言。
void next_file ( int & n , int argc , char *argv [] , fstream & file )
{
n++;
if ( n > argc )
exit ( 0 );
file_handler ( file , argv [n - 1] , 0);
file_handler ( file , argv [n] , 1 ); //this appears to be the cause of the assertion failure
}
void file_handler ( fstream & file , string name , bool open )
{
if ( open == 0 )
{
file.close ();
file.clear ();
return;
}
in.open ( name , ios::in | ios::out | ios::binary );
if ( !in.is_open () )
{
cout << "n Failed opening " << name << "nn";
exit (0);
}
}
你跑到数组的末尾了
如你所知,当一个数组有n
个元素时,它们的值是array[0]
到array[n-1]
。
n++;
if ( n > argc )
exit ( 0 );
在这一点上,n
的最高可能值是argc
,因为如果n > argc
, exit(0)
被调用。但是当n
等于argc
时,这个会继续。因此:
file_handler ( file , argv [n] , 1 ); //this appears to be the cause of the assertion failure
当然这将是断言的原因。这里n
的最大值将是argc
,如上所述。
当然,argv[argc]
不存在。在argv
中有argc
的值,因此最后一个将是argv[argc-1]
。
实际上,设置argv
参数给main()
的方式,argv[argc]
将返回一个nullptr
。file_handler()
的参数是一个std::string
,试图从nullptr
构造一个std::string
将引发assert。
对于main
参数,argv[argc]
的值保证为0。
Then,用n
== argc
,
file_handler ( file , argv [n] , 1 )
白马王子;相当于
file_handler ( file , 0 , 1 )
白马王子;其中0用于初始化std::string
形式参数,这是相当不好的。
- 为什么我的Qt程序在断言失败后继续运行?
- 继续运行程序而无需任何干预,直到要求退出为止
- Qt在特定代码后没有继续运行指令
- 阻止进程在从服务启动时启动,并在某些进程关闭后继续运行服务。
- 测试回文时程序不会继续运行 (C++)
- 如何允许计时器在后台继续运行
- 在SIGABRT c ++信号之后继续运行程序
- 在 fork() 之后,如何在 for() 循环中继续运行 execve()
- 我的程序在调用"parsePacket()"后是继续运行,还是等到收到数据?
- C++循环在 EOF 之后继续运行时这样做
- 在父母获得杀死信号和退出后,用system()产生的儿童进程继续运行
- QT/C++,OS X:退出应用程序时可选择隐藏(),以便应用程序继续运行,并在单击dock中的图标后再次显示
- if (user == 'y'){} 即使它不等于 'y' 也继续运行
- 我如何接受"standard input commands",然后知道何时继续运行该程序?
- FindFirstFile在加密时继续运行相同的文件
- 创建了三个线程来实例化同一个类.但很快只有一个线程继续运行
- MS Visual C++2010学习版继续运行旧代码
- 程序在退出(0)后似乎继续运行
- 程序继续运行,没有任何输出
- 获得由内存泄漏引起的内存溢出,应用程序继续运行和分配