2012-10-03 5 views
0

나는 어려움이 piece of code을 이해 있습니다. Windows에서 실행해야합니다.코드 해석

누구나 그 두 가지 작동 원리를 설명 할 수 있습니까?

감사합니다.

+0

더 많은 코드를 표시 할 수 있습니까? 'n'과's'와'k'는 어떻게 선언됩니까? 나는 추측 할 수 있지만 그것을 추가하면 더 좋을 것입니다 :) – peacemaker

+0

혼란스럽게하는 코드에 대해 더 자세히 설명하고 그에 따라 질문 제목을 업데이트하여 향후 다른 사람들에게 유용 할 것입니다. 그렇지 않으면 Too Localized로 인해 닫힐 수 있습니다. –

답변

4

코드는 좀 더 많은 컨텍스트를 사용하는 것이 더 적합합니다.

// used to store pointers to allocated memory 
unsigned char *n[NO_OF_POINTERS]; 

int s[5000]; // used to store sizes when testing 

.... 

for(i=0;i<NO_OF_ITERATIONS;i++) { 
    k=myrand()%NO_OF_POINTERS; // pick a pointer 
    if(n[k]) { // if it was allocated then free it 
     // check that the stuff we wrote has not changed 
     if(n[k][0]!=(unsigned char)(n[k]+s[k]+k)) 
     printf("Error when checking first byte!\n"); 
     if(s[k]>1 && n[k][s[k]-1]!=(unsigned char)(n[k]-s[k]-k)) 
     printf("Error when checking last byte!\n"); 
     FREE(n[k]); 
    } 
    size=randomsize(); // pick a random size 
      size=1; 
    n[k]=(unsigned char *)MALLOC(size); // do the allocation 
    s[k]=size; // remember the size 
    n[k][0]=(unsigned char)(n[k]+s[k]+k); // put some data in the first and 
    if(size>1) n[k][size-1]=(unsigned char)(n[k]-s[k]-k); // last byte 
} 

마지막 두 줄

는 제 1 및 포인터 값 ( n[k])에 기초하여 수식 할당 ( s[k])의 크기 및 포인터 인덱스 ( k)를 이용하여 값의 마지막 바이트를 설정. 이 수식에는 아무런 의미가 없습니다. 포인터 할당에 따라 저장 될 값의 계산 일뿐입니다.

if 강조 표시된 문은 메모리를 해제하기 전에 첫 번째 (n[k][0]) 바이트와 마지막 (n[k][s[k]-1]) 바이트의 값이 변경되지 않았는지 확인합니다. 이 코드는 기본적으로 VirtualAllocVirtualFree 함수에 대한 테스트 하네스입니다.

+0

고마운 친구, 그 미친 기능을 이해하려고 노력했지만 이제는 수학적으로 난센스 인 것으로 밝혀졌습니다. 그러면 모든 것이 이제 밝아졌습니다 !!! –

+1

자세한 이름 붙은 변수를 들어 보자. – Deanna

0

nunsigned char의 다차원 배열처럼 보입니다. 첫번째 라인 :

if(s[k]>1 && n[k][s[k]-1]!=(unsigned char)(n[k]-s[k]-k)) 

가 보인다

if(n[k][0]!=(unsigned char)(n[k]+s[k]+k)) 

서브 어레이 n[k]의 첫 번째 요소를 검사 두번째 줄은 unsigned char

-(n[k]+s[k]+k) 캐스트의 합과 동일하지 않은 배열 sk 번째 요소가 1보다 크고 (논리 및) 하위 배열 n[k]의 요소 s[k]-1이 일치하지 않는지 확인해야합니다. al의 결과로 (n[k]-s[k]-k)

전체적으로 꽤 나쁜 코드이고 더 좋은 변수 이름을 사용할 수 있습니다!

+0

Ahh 나는 OP가 http://ideone.com/pkhGL에 준 링크를 알아 냈다. @ AndrewCooper의 답변이 더 좋습니다. – peacemaker