[英]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.