[英]Strange error c++ xcode - Thread 1: EXC_BAD_ACCESS
Please ignore how awfully my code is made, it's for a project and I wanted to finish as fast as possible. 请忽略我的代码制作得多么糟糕,它是针对一个项目的,我想尽快完成。 I try to run my code on xcode and I get an error I have no idea about.
我尝试在xcode上运行我的代码,但出现一个我不知道的错误。 In this program, I am supposed to import a text file with phone records and display a cost based on the information.
在该程序中,我应该导入一个带有电话记录的文本文件,并根据该信息显示费用。 The file path is correct, and I don't know what's wrong with my code to cause this error:
文件路径正确,并且我不知道导致此错误的代码出了什么问题:
https://drive.google.com/file/d/0Bysk6_x4B46uU2pmWFhRYWd6d1E/view?usp=sharing https://drive.google.com/file/d/0Bysk6_x4B46uU2pmWFhRYWd6d1E/view?usp=sharing
Here's the code: 这是代码:
// phoneRecords.cpp
// PhoneRecords
//
// Created by Roei Bustein on 7/19/16.
// Copyright © 2016 Roei Bustein. All rights reserved.
//
/*
* This program reads records from a file and parse each
* record into variables as it goes
*/
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
string makeTimeIntoInt(string line[]) {
string temp = "";
string time = line[2];
for (char a : time) {
if (a == ':')
continue;
else
temp += a;
}
return temp;
}
float calculateCost(string line[]) {
int time = stoi(line[2]);
int duration = stoi(line[3]);
if (line[1] == "Mo" || line[1] == "Tu" || line[1] == "We" ||
line[1] == "Th" || line[1] == "Fr") {
if (time < 800 || time > 1800) {
return duration * 0.25;
} else
return duration * 0.4;
}
else if (line[1] == "Sa" || line[1] == "Su") {
return duration * 0.15;
}
return 0;
}
int main() {
ifstream inputFile;
string line;
int cnt = 0;
inputFile.open(
"/Users/roeibustein/Documents/C++ "
"Workspace/PhoneRecords/PhoneRecords/calls1.txt");
string arr[18];
string line1[3], line2[3], line3[3], line4[3], line5[3], line6[3];
float costLine1, costLine2, costLine3, costLine4, costLine5, costLine6;
if (inputFile.is_open()) {
while (getline(inputFile, line)) {
istringstream split(line);
while (split) {
split >> arr[cnt];
cnt++;
split >> arr[cnt];
cnt++;
split >> arr[cnt];
cnt++;
}
}
}
line1[1] = arr[1];
line1[2] = arr[2];
line1[3] = arr[3];
line2[1] = arr[4];
line2[2] = arr[5];
line2[3] = arr[6];
line3[1] = arr[7];
line3[2] = arr[8];
line3[3] = arr[9];
line4[1] = arr[10];
line4[2] = arr[11];
line4[3] = arr[12];
line5[1] = arr[13];
line5[2] = arr[14];
line5[3] = arr[15];
line6[1] = arr[16];
line6[2] = arr[17];
line6[3] = arr[18];
line1[2] = makeTimeIntoInt(line1);
line2[2] = makeTimeIntoInt(line2);
line3[2] = makeTimeIntoInt(line3);
line4[2] = makeTimeIntoInt(line4);
line5[2] = makeTimeIntoInt(line5);
line6[2] = makeTimeIntoInt(line6);
costLine1 = calculateCost(line1);
costLine2 = calculateCost(line2);
costLine3 = calculateCost(line3);
costLine4 = calculateCost(line4);
costLine5 = calculateCost(line5);
costLine6 = calculateCost(line6);
cout << line1[1] << " " << line1[2] << " " << line1[3] << " " << costLine1
<< "\n";
cout << line2[1] << " " << line2[2] << " " << line2[3] << " " << costLine2
<< "\n";
cout << line3[1] << " " << line3[2] << " " << line3[3] << " " << costLine3
<< "\n";
cout << line4[1] << " " << line4[2] << " " << line4[3] << " " << costLine4
<< "\n";
cout << line5[1] << " " << line5[2] << " " << line5[3] << " " << costLine5
<< "\n";
cout << line6[1] << " " << line6[2] << " " << line6[3] << " " << costLine6
<< "\n";
return 0;
}
I think your error is caused by accesing an out-of-range index in table. 我认为您的错误是由于访问表中超出范围的索引引起的。 In c++ tables are indexed from 0, so when you declare
string arr[18]
you can not get a value by calling arr[18]
. 在c ++中,表的索引从0开始,因此在声明
string arr[18]
,无法通过调用arr[18]
获得值。 In other words the first element is arr[0]
and the last is arr[17]
换句话说,第一个元素是
arr[0]
,最后一个元素是arr[17]
Your array is beyond it's bounds . 您的数组超出了范围。 Copy this code to see if it work.
复制此代码以查看其是否有效。
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;
string makeTimeIntoInt(string line[]) {
string temp = "";
string time = line[1];
for (char a : time) {
if (a == ':')
continue;
else
temp += a;
}
return temp;
}
float calculateCost(string line[]) {
int time = stoi(line[1]);
int duration = stoi(line[2]);
if (line[0] == "Mo" || line[0] == "Tu" || line[0] == "We" ||
line[0] == "Th" || line[0] == "Fr") {
if (time < 800 || time > 1800) {
return duration * 0.25;
} else
return duration * 0.4;
}
else if (line[0] == "Sa" || line[0] == "Su") {
return duration * 0.15;
}
return 0;
}
int main() {
ifstream inputFile;
string line;
int cnt = 0;
inputFile.open("/Users/lhmac/abc.txt");
string arr[18];
string line1[3], line2[3], line3[3], line4[3], line5[3], line6[3];
float costLine1, costLine2, costLine3, costLine4, costLine5, costLine6;
if (!inputFile.is_open()) {
return 0;
}
while (getline(inputFile, line) && cnt < 18) {
istringstream split(line);
split >> arr[cnt];
cnt++;
split >> arr[cnt];
cnt++;
split >> arr[cnt];
cnt++;
}
inputFile.close();
line1[0] = arr[0];
line1[1] = arr[1];
line1[2] = arr[2];
line2[0] = arr[3];
line2[1] = arr[4];
line2[2] = arr[5];
line3[0] = arr[6];
line3[1] = arr[7];
line3[2] = arr[8];
line4[0] = arr[9];
line4[1] = arr[10];
line4[2] = arr[11];
line5[0] = arr[12];
line5[1] = arr[13];
line5[2] = arr[14];
line6[0] = arr[15];
line6[1] = arr[16];
line6[2] = arr[17];
line1[2] = makeTimeIntoInt(line1);
line2[2] = makeTimeIntoInt(line2);
line3[2] = makeTimeIntoInt(line3);
line4[2] = makeTimeIntoInt(line4);
line5[2] = makeTimeIntoInt(line5);
line6[2] = makeTimeIntoInt(line6);
costLine1 = calculateCost(line1);
costLine2 = calculateCost(line2);
costLine3 = calculateCost(line3);
costLine4 = calculateCost(line4);
costLine5 = calculateCost(line5);
costLine6 = calculateCost(line6);
cout << line1[0] << " " << line1[1] << " " << line1[2] << " " << costLine1
<< "\n";
cout << line2[0] << " " << line2[1] << " " << line2[2] << " " << costLine2
<< "\n";
cout << line3[0] << " " << line3[1] << " " << line3[2] << " " << costLine3
<< "\n";
cout << line4[0] << " " << line4[1] << " " << line4[2] << " " << costLine4
<< "\n";
cout << line5[0] << " " << line5[1] << " " << line5[2] << " " << costLine5
<< "\n";
cout << line6[0] << " " << line6[1] << " " << line6[2] << " " << costLine6
<< "\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.