this topic에서 영감을 얻어 필자는 정확히 수행하는 간단한 프로그램을 작성하기로 결정했습니다.
로직이 복잡하지 않고 시간의 75 %를 작동하는 프로그램이 있습니다. 요청 된 숫자의 수는 #define BUFSIZE x
으로 정의됩니다. 여기서 x
은 임의의 int 일 수 있습니다.
((BUFSIZE+1) % sizeof(int)) == 0
일 때 문제가 발생합니다.프로그램의 오작동 시간의 25 %
예를 들어, BUFSIZE=10
인 경우 BUFSIZE=11
이 이상한 동작을하면 프로그램이 올바르게 작동합니다.
#include <stdio.h>
#include <stdlib.h>
#define BUFSIZE 7
int max(int *buf);
int main()
{
int bufsize = BUFSIZE, *buf = malloc(sizeof(int[bufsize]));
// read values
int *ptr = buf;
while(--bufsize + 1)
{
printf("Input %d: ", BUFSIZE - bufsize);
scanf("%d", ptr);
++ptr;
}
// reset pointer and determine max
ptr = buf;
printf("\nMax: %d\n", max(ptr));
// cleanup
free(buf);
ptr = NULL;
buf = NULL;
exit(EXIT_SUCCESS);
}
int max(int *buf)
{
int max = 0;
while(*buf)
{
printf("%d\n", *buf);
if(*buf > max) max = *buf;
++buf;
}
return max;
}
AND (올바른) BUFSIZE = 2 BUFSIZE = 3 (잘못된) 일부 샘플 출력 : 여기
는 소스 코드이다.suze:/home/born05/htdocs/experiments/c# gcc input.c && ./a.out
Input 1: 12
Input 2: 23
12
23
Max: 23
suze:/home/born05/htdocs/experiments/c# gcc input.c && ./a.out
Input 1: 12
Input 2: 23
Input 3: 34
12
23
34
135153
Max: 135153
매우 논리적 인 느낌이 들지만,이 비웃음의 정확한 원인에 대해 내 손가락을 댈 수 없습니다. 누군가 나에게 (아마도 명백한) 결함을 지적 할 수 있습니까?
를 어? 당신은'buf [3]'와'buf [4]'에서 각각 센티넬 값을 사용하고 있지만, 크기는 각각 2와 3입니다. – falstro