【发布时间】:2015-04-05 21:08:16
【问题描述】:
我在 Code Blocks 中运行一个 c++ 程序,但出现错误: “进程以状态 -1073741510 终止”。 现在我发现错误发生在:
new_list = new char[number_of_symbols + 1];
问题是我无法终生弄清楚我在这里做错了什么。为了提供更多上下文,我将完整的代码放在下面。
#include <iostream>
#include <math.h>
#include <time.h>
using namespace std;
struct transition{
int write_symbol;
int move_head;
int next_state;
};
class TM{
public:
TM();
~TM();
void add_transition(int, char, int, char, int);
void remove_transition(int, char);
void run();
void run(char*, int);
private:
int current_state;
int head_position;
int number_of_states;
int number_of_symbols;
char* symbol_list;
transition** action_table;
void add_state(int);
int add_symbol(char);
void print(char*);
void free_action_table();
};
TM::TM(){
number_of_states = 0;
number_of_symbols = 0;
}
TM::~TM(){
free_action_table();
}
void TM::add_transition(int p, char sigma, int q, char tau, int D){
int symbol_id1, symbol_id2;
cout << "Gaat dit goed?" << endl;
add_state(p);
cout << "Gaat dat goed?" << endl;
add_state(q);
cout << "En gaat deze goed?" << endl;
symbol_id1 = add_symbol(sigma);
cout << "Gaat die ook goed?" << endl;
symbol_id2 = add_symbol(tau);
cout << "Gaat misschien alles goed?" << endl;
action_table[symbol_id1][p].write_symbol = symbol_id2;
action_table[symbol_id1][p].next_state = q;
action_table[symbol_id1][p].move_head = D;
cout << "Alles gaat goed!" << endl;
}
void TM::add_state(int state){
transition** new_table;
if(state >= number_of_states){
new_table = new transition*[number_of_symbols];
for(int i = 0; i < number_of_symbols; i++){
new_table[i] = new transition[state + 1];
for(int j = 0; j < number_of_states; j++){
new_table[i][j] = action_table[i][j];
}
for(int j = number_of_states; j <= state; j++){
new_table[i][number_of_states - 1].write_symbol = -1;
new_table[i][number_of_states - 1].next_state = -2;
new_table[i][number_of_states - 1].move_head = 0;
}
}
free_action_table();
number_of_states = state + 1;
action_table = new_table;
}
}
int TM::add_symbol(char symbol){
transition** new_table;
char* new_list;
cout << "Gaat hier iets fout?" << endl;
for(int i = 0; i < number_of_symbols; i++){
if(symbol_list[number_of_symbols] == symbol){
return i;
}
}
new_table = new transition*[number_of_symbols + 1];
cout << "Gaat daar iets fout?" << endl;
new_list = new char[number_of_symbols + 1];
cout << "Of misschien hier?" << endl;
for(int i = 0; i < number_of_symbols; i++){
new_table[i] = new transition[number_of_states];
new_list[i] = symbol_list[i];
for(int j = 0; j < number_of_states; j++){
new_table[i][j] = action_table[i][j];
}
}
for(int j = 0; j < number_of_states; j++){
new_table[number_of_symbols][j].write_symbol = 0;
new_table[number_of_symbols][j].next_state = -2;
new_table[number_of_symbols][j].move_head = 0;
}
cout << "Zou het kunnen?" << endl;
new_list[number_of_symbols] = symbol;
free_action_table();
if(number_of_symbols > 0){
delete[] symbol_list;
}
symbol_list = new_list;
number_of_symbols++;
action_table = new_table;
cout << "Alles gaat goed!" << endl;
return number_of_symbols - 1;
}
void TM::free_action_table(){
for(int i = 0; i < number_of_symbols; i++){
delete[] action_table[i];
}
delete[] action_table;
}
int main(){
TM one = TM();
one.add_transition(0,'0',0,'1',0);
one.add_transition(0,'1',-1,'1',0);
return 0;
}
运行后我得到以下输出:
Gaat dit goed?
Gaat dat goed?
En gaat deze goed?
Gaat hier iets fout?
Gaat daar iets fout?
Of misschien hier?
Zou het kunnen?
Alles gaat goed!
Gaat die ook goed?
Gaat hier iets fout?
Gaat daar iets fout?
Process returned -1073741819 (0xC0000005) execution time : 2.028 s
Press any key to continue.
这意味着我之前提到的那行有问题,但我不知道为什么。有人可以告诉我我在这里做错了什么吗?
【问题讨论】:
-
Google 告诉你 0xC0000005 表示访问冲突。
-
好的,但这仍然不能真正帮助我。我如何违反任何内存访问权限?
-
Minimal 测试用例。您还没有完成调试。
标签: c++ codeblocks