C++ EXC_BAD_ACCESS, argv[]
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]);
// ...
我遗漏了其余部分,因为错误发生在其他任何事情之前。
代码在终端中运行,但没有通过我班的自动分级器。
输入的参数:
/21点400 1
应该适用于任何数字。
argv[0]
不应该是21点吗?argv[1]
是第一个数字,argv[2]
是第二个数字?
cout
不会填充argv
的元素,这些元素来自用于执行程序的命令行。此外,无论何时使用argv
,请务必检查argc
,这是argv
的有效索引数。您的程序可能正在崩溃,因为没有向程序传递任何参数,因此argv
的元素不可用。
您需要使用cin
调用来读取您期望的用户输入,或者将程序更改为使用从命令行传入的值,即没有提示或读取。
您添加的关于argv
的假设是正确的:如果使用:./blackjack 400 1
执行程序,则argv[1]
应为400
,argv[2]
应为1
。
因为,根据您的编辑,您似乎希望从命令行获取这些数字,然后删除cout
调用。
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;
}
如果我忘记了程序询问的命令行参数。如果我记住了参数,则使用该参数而不需要进一步干预。很明显,你可以将其扩展到更多的论点中。
相关文章:
- 为什么我的for循环不能正确获取argv
- 碱基对映射 - 将 argv[i] 移动到整数或字符作为输入
- 如何将 argv[1] 转换为 LPCVOID?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- C ++编译器如何获取argv字符串的长度
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 如何使用提升program_options在使用后消耗/删除 ARGV 中的选项
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 如何将argv字符串更改为大数字的长整数
- 例外:'Access violation reading location'
- 向量数组"Cannot access memory at address"
- 方法 argv[] SWIG C++ / Python 中的错误,会发生什么?
- Windeployqt不会运行,"Access is denied."
- 使用字符** argv 时如何避免指针算法
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++