【发布时间】:2013-01-02 12:00:00
【问题描述】:
我制作了一个简单的测试程序来玩转 C++11 线程。
#include <iostream>
#include <stdlib.h>
#include <thread>
using namespace std;
void tee(int civ)
{
for(int loop=0; loop<19; loop++, civ++)
{
civ = civ%19;
cout << loop << "\t" << civ << endl;
this_thread::sleep_for(chrono::milliseconds(300));
}
}
void koot()
{
while(true)
{
cout << ":) ";
this_thread::sleep_for(chrono::milliseconds(300));
}
}
int main(int argc, char *argv[])
{
thread saie(tee, atoi(argv[1])),
kamaa(koot);
saie.join();
kamaa.join();
return 0;
}
只要我提供命令行参数,它就可以正常工作,但如果我不提供,它就会崩溃。 如何解决? 我尝试检查参数计数,如果它们存在,则无济于事。
编辑:我必须添加这一行:
if(argc < 2) return 1;
【问题讨论】:
-
您正在使用
agv[1],如果没有给出命令行参数,它将是NULL。你是怎么检查的? -
因为
argv[1]将是NULL? -
嗯...因为您在调用
saie时使用了argv[1],如果您不提供它就是NULL? -
为什么会是
NULL,伙计们?在我看来,它的值,例如它,将是完全未指定的,并且尝试访问它会调用未定义的行为。 -
好的,因为
[C++11: 3.6.1/2]说:The value of argv[argc] shall be 0.。那么请注意,OP,这并不意味着argv[2]等也将是NULL。
标签: c++ command-line crash command-line-arguments