|
프로그램 적으로 에러는 없습니다.
단지 문제가 있다면 C:\\input.txt 파일이 정상적으로 존재 하는지
또 존재 한다고 했을때 이 코드가 정상적으로 실행되도록 값을 가지고 있는지 그게 관건이겠네요..
파일이 없거나 정상적인 값이 아닌경우 배열의 범위를 넘어서는 부분을 Access 하는 부분이 생기면서
에러가 발생하는 것입니다.
그리고 코드상에 몇가지 훈수를 둔다면
fopen으로 파일을 열었으면 반드시 fclose 를 이용해서 파일을 닫아 주어야 합니다. 그렇지 않으면
파일이 나중에 깨질수도 있습니다.
그리고 굳이 사용안하는 코드는 지우시는게 좋겠지요.. "out = fopen("C:\\output.txt", "w");"
아울러 아래 부분은 코드낭비에 메모리낭비, 그리고 시간낭비까지 있는 코드 입니다.
for(c=0, d=0 ; c,d<k ; c++,d++)
{
fscanf(in, "%d %d" , &a[c], &b[d]);
}
이렇게 고치세요..
for(c=0 ; c<k ; c++)
{
fscanf(in, "%d %d" , &a[c], &b[c]);
}
C언어학도 님이 쓰신 글 :
: c언어에서 "Unhandled exception~: Access Violation." 오류
:
: 아무리고민해봐도 왜 이오류가나오는지 이유를 잘모르겠습니다;
:
:
:
: 도와주세요 ㅠㅠ
:
:
:
:
:
: #include <stdio.h>
: #include <Windows.h>
: #include <math.h>
:
:
: int main(void){
: unsigned int time_start;
: unsigned int time_end;
: unsigned int time_true;
:
:
:
:
:
:
:
: int *count;
: int c,d,e,i,j,t,k,n,m,z,answer = 0;
:
: int a[25000];
: int b[25000];
:
: FILE * in;
: FILE * out;
: in = fopen("C:\\input.txt", "r");
: out = fopen("C:\\output.txt", "w");
:
: time_start = GetTickCount();
:
: fscanf(in, "%d %d", &n, &k);
: count = (int*)calloc(n, sizeof(int));
:
:
:
: for(c=0, d=0 ; c,d<k ; c++,d++){
: fscanf(in, "%d %d" , &a[c], &b[d]);
: }
:
:
:
: for(e=0; e<k ;e++){
: z=a[e], m=b[e];
: for(z; z <= m ; z++){
: count[z]++;
: }
: }
:
:
:
: for(i=0; i<n-1 ; i++){
: for(j=i+1; j<n; j++){
:
: if(count[i] > count[j]) {
: t = count[i];
: count [i] = count [j];
: count [j] = t;
: }
: }
: }
:
: answer = n/2+1;
:
: fprintf(out, "%d", &count[answer]);
: free(count);
:
: time_end = GetTickCount();
: time_true = time_end - time_start;
: printf("\n Finishing in : %d \n", time_true);
: return 0;}
:
|