이 프로그램이 출력하는 이유 : 분할 오류 : 11
#include <iostream>
using namespace std;
int main(){
int **a = (int**)new int[10][3];
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
cout << a[0][0] << "," << a[0][1] << "," << a[0][2];
return 0;
}
이 선언 변경
int **a = (int**)new int[10][3];
...에
int ( *a )[3] = new int[10][3];
그렇지 않으면 new 연산자가 반환 한 포인터 int **
와 int ( *a )[3]
호환되지 않습니다.
문제는 타입 이 a[0]
있을 때 컴파일러가 할당 된 초기화되지 않은 메모리를 타입의 포인터의 유효한 값으로 읽으려고한다는 것 입니다.a
int **
int *
또한 프로그램 끝에서 포인터를 삭제해야합니다.
delete [] a;
또 다른 접근 방식은 다음과 같습니다.
int **a = new int * [10];
for ( size_t i = 0; i < 10; i++ ) a[i] = new int[3];
이 경우 할당 된 메모리는 다음과 같은 방법으로 해제됩니다.
for ( size_t i = 0; i < 10; i++ ) delete [] a[i];
delete [] a;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다