Поток 1: Ошибка EXC_BAD_ACCESS (код=1, адрес=0x0) при использовании scanf

#c

#c

Вопрос:

Я пытаюсь ввести данные, используя функцию scanf для моделирования. Тем не менее, он выдает вышеуказанную ошибку в scanf. Ниже приведена некоторая часть кода. Он работал раньше, но теперь выдает эту ошибку **Поток 1: EXC_BAD_ACCESS (код=1, адрес=0x0) **

 #include lt;iostreamgt; #include lt;iomanipgt; #include lt;cmathgt; #include lt;fstreamgt; #include lt;cstdlibgt; #include lt;randomgt; #include lt;chronogt; #include "normdist.h" using namespace std; double initial_stock_price, expiration_time, volatility, R; int no_of_discrete_barriers, no_of_trials;  int main(int argc, char* argv[]) {   sscanf(argv[1], "%lf", amp;expiration_time);  sscanf(argv[2], "%lf", amp;risk_free_rate);  sscanf(argv[3], "%lf", amp;volatility);  sscanf(argv[4], "%lf", amp;initial_stock_price);  sscanf(argv[5], "%lf", amp;strike_price);  sscanf(argv[6], "%d", amp;no_of_trials);  sscanf(argv[7], "%d", amp;no_of_discrete_barriers);  sscanf(argv[8], "%lf", amp;barrier_price);  

Комментарии:

1. Какие аргументы командной строки вы передаете?

2. У вас действительно есть данные argv ? Если в этом месте чего-то нет, это может привести к плохому доступу.

3. Удалите все эти #include директивы и то using namespace std; , и просто напишите #include lt;stdio.hgt; . Они не служат никакой цели в коде, который вы показали.

4. I вы должны проверить, если argc gt;= 9, прежде чем пытаться выйти, если нет

5. int argc — В чем заключается ценность argc ? В любом случае, вы никогда не должны писать программу, которая сначала не проверяет значение argc , собираетесь ли вы каким-либо образом получить доступ argv . Не удивляйтесь, если argc это не то, чего вы ожидали.

Ответ №1:

Вы вызываете программу с аргументами, разделенными запятой? Вы должны вызывать программу вот так:

 ./program 1 0.05 0.25 50 20 100000 25 20  

Когда я называю это так, это не приводит к сбою на моем компьютере.

Также, как указано выше, всегда проверяйте в начале программы, если argc gt;= 8, если нет — отобразите использование программы и завершите работу.

Комментарии:

1. Я вызываю эти входные данные из продукта-gt;схема-gt;gt; аргументы в xcode с помощью инструмента командной строки

2. Можете ли вы попробовать вызвать его через командную строку, как показано выше (вне кода vs)? Возможно, где-то в файле конфигурации есть опечатка, и аргументы передаются неправильно.