[英]C++ EXC_BAD_ACCESS, argv[]
我已经坚持了一段时间,无法调试此EXC_BAD_ACCESS
错误。 我已经运行了NSZombie,并且我很确定它是argv[1]
的内存问题(或其他任何问题)。 我已经检查了我的语法和库,所以不知道为什么它不会存储过去arg[0]
。
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main(int argc, char* argv[])
{
cout << "Enter the initial bankroll" << endl;
int bankroll = atoi(argv[1]); //code faults here
cout << "Enter seed" << endl;
int seed = atoi(argv[2]);
// ...
我忽略了其余部分,因为错误首先发生。
该代码在终端中运行,但未通过我的课程的自动平地机。
输入的参数:
./二十一点400 1
应该适用于任何数字。
argv[0]
应该是二十一点, argv[1]
是第一个数字, argv[2]
是第二个数字吗?
cout
不能填充argv
的元素,这些元素来自用于执行程序的命令行。 另外,每当您使用argv
,请务必检查argc
,这是argv
中有效索引的数量。 您的程序可能崩溃,因为您没有向程序传递任何参数,因此argv
的元素不可用。
您将需要使用cin
调用来读取所需的用户输入,或将程序更改为使用从命令行传入的值,即不提示或不读取。
您添加的关于argv
假设是正确的:如果使用./blackjack 400 1
执行程序,则argv[1]
应该为400
,而argv[2]
应该为1
。
因为根据您的编辑,您似乎想从命令行获取这些数字,然后删除您的cout
调用。
正如其他人指出的,argv是命令行参数。 如果它们已满,请使用它们。 我经常这样:
int
main(int n_app_args, char** app_arg)
{
std::string nec_file;
if (n_app_args > 1)
nec_file = app_arg[1];
else
{
std::cout << "Enter NEC output file: ";
std::cin >> nec_file;
}
如果我忘记了命令行参数,程序就会问我。 如果我记得该论点,则无需进一步干预即可使用该论点。 您显然可以将其扩展为更多参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.