나는 수업을위한 보드 게임을 만들고있다. 각 이동을 노드로 전달하고 사용자가 u를 누르면 시작 상태가 될 때까지 보드를 실행 취소해야합니다. 보드를 한 번 이상 실행 취소하려고하면 포인터가 해제됩니다 (포인터가 해제 됨으로 할당되지 않음)? 아무도 내가이 오류 메시지를 해결할 수있는 아이디어가 있습니까? 당신이 malloc()
으로 할당 할 경우해제 된 포인터가 C++에 할당되지 않았습니까?
state * removeState(state * head, int *board, int boardSize, int move, int score){
state * newState = (state *)malloc(sizeof(state));
newState->board = (int*)malloc(sizeof(int) * (boardSize * boardSize));
if(head->next == NULL) {
printf("Can't undo past the beginning of the game. Enter 'c' to continue: ");
char c;
scanf(" %c", &c); // now pause the output
}
if(head->next!= NULL){
newState = head;
head = head->next;
delete(newState); // THIS CAUSES THE ERROR MESSEGE IF I UNDO MORE THAN ONCE!
for(int row=0; row<boardSize; row++) {
for(int col=0; col<boardSize; col++) {
int current = row*boardSize + col; // 1-d index corresponding to row & col
board[current]= head->board[current];
}
}
score = newState->score;
//move = newState ->move;
printf("Working! \n");
}
return newState;
}
이 태그는'C++'로 태그를 붙였습니다. 그러나 내가보기에 그것들은 많은 실수로 'C'입니다. – PaulMcKenzie
왜 C++에서'malloc','printf'를 사용하고 있습니까? 왜이 물건에 STL을 사용하지 않습니까? –
첫째, 왜 C++ 프로그램에서 malloc()을 사용하고 있습니까? 뿐만 아니라, malloc()을 C++'delete' 연산자와 혼합했습니다. 한 걸음 물러서서'std :: vector'가하는 일을 배우십시오. 문제가 실질적으로 사라지게 할 것입니다. – PaulMcKenzie