체스 엔진을 쓰고 의사 무작위 움직임을 얻으려는 경우 이동 생성 함수에 배열을 채 웁니다.지역 변수 구조체가 범위를 벗어날 때 재설정되지 않는 이유는 무엇입니까?
...
else if(pstrcmp(input, (char*)"check", 5)){
int checkIndex = getIndex(input[6], input[7] - 49);
printf("checkindex %i\n", checkIndex);
if(!(checkIndex < 0 || checkIndex > 127)){
//we've received a valid check
struct m mUn[MOVE_BUFF];
gen_psm(checkIndex, mUn);
int i = 0;
while(mUn[i].start != mUn[i].end && i < MOVE_BUFF){
printf("%s\n", GSQ(mUn[i].end));
i++;
}
}
}
...
첫 번째 줄은 검사를 그냥 입력 : 여기에 몇 가지 코드입니다. 코드의 고기는 struct m mUn[MOVE_BUFF]
과 while 루프 사이에 있습니다. 그래서 내가 만든 struct m
배열을 만들었고 특정 이동을 지정하는 몇 가지 int를 보유한 다음 확인 할 사각형의 인덱스와 채울 배열을 취하는 gen_psm
에 전달합니다. 인덱스에있는 조각에 대한 유효한 이동으로 배열을 채 웁니다. 첫 번째 이동을위한 멋지고 멋쟁이. 그런 다음 두 번째 시도를 시도합니다. 배열을 처음 선언 한 곳에서 오랫동안 나가서 mUn의 범위를 벗어났습니다. 데이터를 유지하는 것은 구조체의 일부 특성입니까? 0을 채울 필요가 있습니까 (시도했을 때 0으로 채워진 것처럼 보입니다). 0으로 채워야 할 경우 더 빠른 방법이 있습니까 (0으로 채우려면 1 억 번을 채워야합니다.).
'C'또는 'C++'중 하나를 지정하십시오. 함수 호출을 기반으로'C'라고 가정하고 문자열 리터럴을'char *'로 형 변환한다고 가정합니다. – Joe
가능한 [로컬 변수의 메모리가 범위 외부에서 액세스 될 수 있습니까?] (http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope) – fredoverflow
움직임이있는 전역/정적 배열을 사용하는 것이 가장 좋을 수 있으며 스택으로 사용할 수 있습니다. 크기가 고정되어 (약 60 * 2 * 30), 범위를 벗어나는 지 확인하기 위해 몇 가지 주장을합니다. – wildplasser