2013-03-07 3 views
-5
const unsigned int PATRON_TABLE_SIZE = 10001; 
Patron* patronTable[PATRON_TABLE_SIZE]; 

Patron은 기본 정보를 포함하는 클래스입니다. 나는 patronTable [500]에서 포인터를 검사했는데 그것은 NULL이지만 patronTable [5000]의 포인터는 NULL이 아닙니다. 이것이 왜 그런지에 대한 정보를 찾을 수 없습니다. 어떤 도움을 주셔서 감사합니다!C++ 포인터 배열의 최대 크기

+5

'patronTable'을 초기화 했습니까? – deepmax

+1

테이블을 정의했다고해서 실제로 채워질 수는 없습니다. 실제로 배열의 현재 메모리 위치에 임의의 가비지가 남아 있고 프로그램을 실행할 때마다 null/not null 항목이 무작위로 변경됩니다. –

답변

1

전역이 아니거나 정적으로 선언 된 C++의 배열은 기본적으로 초기화되지 않습니다.

2

C++는 포인터 값의 배열을 명시 적으로 초기화하지 않습니다 (명시 적으로 지정하지 않는 한). 그래서 당신이보고있는 것은 어레이가 할당 된 공간을 점유 한 임의의 쓰레기가 아닙니다. patronTable

0

비 관리 (.NET 아님) 코드를 프로그래밍하면 메모리가 지워지지 않는 것처럼 길게 PATRON_TABLE_SIZE입니다. 모든 배열 요소가 NULL이 memset(patronTable, 0, PATRON_TABLE_SIZE * sizeof(Patron[0]));

0

처럼 뭔가를하고 싶다면 당신은 제로에 모든 값을 설정합니다 그

Patron* patronTable[PATRON_TABLE_SIZE] = { }; 

하여 배열의 내용을 초기화 할 수 있습니다.