내가 줄 단위를 파일을 읽으려고하고,정수 점진 응용 프로그램
(로봇 객체가 이해할 수있는 지시 사항에 대한 정보를 보유) '명령'이라는 객체 데이터의 라인을 저장하고 충돌 나는 1 변수 "IDX을"증가 (구문을 사용하여 : IDX를 ++)하려고 할 때 그래서 기본적으로
int robot::readfile(const char fname[]) {
FILE *rf;
rf = fopen(fname, "r");
if (rf != NULL) {
int idx = 0;
char record[161];
while ((this->cmd_count < this->cmd_size)
&& (fgets(record, 160, rf) != NULL)) {
command tmp_cmd(record);
this->cmds[idx++] = tmp_cmd;
}
} else {
perror(fname);
}
fclose(rf);
return 1;
}
, 위의 코드에서, 다음은 읽기 기능 (C++에서), 그것은 기본적으로 그냥 응용 프로그램을 충돌합니다.
왜 그런가?
편집 : 주석 기에서 reqested으로 :
void robot::cmd_malloc(int size) {
// most likely will cause problems if size is below 1.
if (size < 1) {
return;
}
try {
this->cmds = new command[size];
this->cmd_size = size;
this->cmd_count = 0;
} catch (std::bad_alloc) {
// bad allocation exception.
this->cmds = NULL;
cout << "bad_alloc:" << (sizeof(command) * size) << " in 'robot::cmd_malloc'." << endl;
}
}
당신이 제대로 초기화하지 않은 테이블'cmds'에 색인을 생성하는 것이 아니라 충돌을 일으키는 것이 확실합니까? 'cmds'를 초기화하는 코드를 볼 수 있습니까? – templatetypedef
당신은 결코'this-> cmd_count'를 증가시키지 않으십니까? –
예, 확신합니다. 나는 심지어 배열의 증가를 제거하려고 노력했다. 그리고 확실한 - 질문을 지금 업데이트하십시오! – TheAJ