簡體   English   中英

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]);

    // ...

我忽略了其余部分,因為錯誤首先發生。

該代碼在終端中運行,但未通過我的課程的自動平地機。

輸入的參數:

./二十一點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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM