我被編碼在USACO培訓Page的問題之一,插入功能,當我試圖調試我的代碼:當我嘗試輸入「ANDY哈里」0xC0000005:執行地址0x00000000的訪問衝突。當試圖訪問多重映射
#include <iostream>
#include<fstream>
#include<string>
#include<map>
#include<math.h>
using namespace std;
int translate(string &s) {
int n = s.length();
int result = 0;
for (int i = 0; i < s.length(); i++) {
int n1 = 0;
if (s.at(i) == 'Q' || s.at(i) == 'Z') {
return -1;
}
switch (s.at(i)) {
case 'A':
case 'B':
case'C':
result = result + 2 * pow(10, n-1);
n--;
break;
case 'D':
case 'E':
case'F':
result = result + 3 * pow(10, n - 1);
n--;
break;
case 'G':
case 'H':
case 'I':
result = result + 4 * pow(10, n - 1);
n--;
break;
case 'J':
case 'K':
case 'L':
result = result + 5 * pow(10, n - 1);
n--;
break;
case 'M':
case 'N':
case 'O':
result = result + 6 * pow(10, n - 1);
n--;
break;
case 'P':
case 'R':
case 'S':
result = result + 7 * pow(10, n - 1);
n--;
break;
case 'T':
case 'U':
case 'V':
result = result + 8 * pow(10, n - 1);
n--;
break;
case 'W':
case 'X':
case 'Y':
result = result + 9 * pow(10, n - 1);
n--;
break;
}
}
return result;
}
bool mycompare(int n, int m) {
string a, b;
a = to_string(n);
b = to_string(m);
if (a < b) {
return true;
}
else return false;
}
int main() {
bool(*ptr)(int, int);
typedef multimap<int, string, bool(*)(int, int)> mmid;
mmid pairs(ptr);
string s1;
ifstream inFile("dict.txt", ios::in | ios::binary);
while (cin>>s1) {
int f =translate(s1);
pairs.insert(mmid::value_type(f, s1));
}
int m;
cin >> m;
multimap<int, string>::iterator it;
while (true) {
it = pairs.find(m);
if (it != pairs.end()) {
cout << it->second << endl;
pairs.erase(it);
}
else {
break;
}
}
return 0;
}
,當它處理到第二個條目時,
pairs.insert(mmid::value_type(f, s1));
在這一行它給我代碼0xC0000005:執行位置0x00000000的訪問衝突。我的代碼有什麼問題?爲什麼它給我的錯誤信息不是在第一個入口,而是在第二個入口?謝謝。
因爲您重寫標準比較對象,您在哪裏設置比較對象? – NathanOliver
「當我試圖調試我的代碼時」 - 這聽起來像是你的真正意思是_test_而不是調試。那麼,現在你的測試已經揭示了一個_bug_,所以你需要*去追蹤它。調試的方法是使用調試器!有了它,你就可以在故障發生後(或在任意的中斷點)運行堆棧跟蹤,以查看導致問題的功能的確切調用鏈,從那裏你可以找出原因。你有沒有嘗試過使用調試器? –
爲什麼在程序結束時你有一個無限的'while'循環? – PaulMcKenzie