편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.01.18

    C언어 기반 파일 탐색 프로그램 "HEAP CORRUPTION DETECTED" 오류


    컴퓨터에 있는 특정 폴더를 제외한 파일 전체를 탐색하는 프로그램을 작성중입니다. 실행하면 "HEAP CORRUPTION DETECTED" 라는 디버그 에러가 발생하는데 이 에러가 발생하는 경우는

    • 메모리 할당이 되지 않은 포인터(NULL Pointer)에 값을 넣음
    • 할당치를 초과하여 데이터가 입력됨

    라고 나와있어 열심히 코드를 뒤적거리고 수정해봤지만 해결되지 않았습니다! VisualStudio로 디버깅을 시도했을 땐 do-while문 내에서 발생한다는데,

    조언 부탁드려요.

    #define MAX_LEN 1024
    
    void FindAllFiles(char file_path[]) {
        HANDLE hFileHandle; // File Descriptor Handle
        WIN32_FIND_DATA findFileData; // File Data 구조
    
        char file_path2[_MAX_PATH];
        strcat(file_path, "\\");
        strcpy(file_path2, file_path);
        strcat(file_path, "*");
    
        hFileHandle = FindFirstFile(file_path, &findFileData);
        //찾고 싶은 파일명과 핸들을 얻어옴
    
        if (hFileHandle != INVALID_HANDLE_VALUE) {
            do {//TESTTEST 폴더를 제외하고 탐색
                printf("findFileData.cFileName : %s\n", findFileData.cFileName);
                if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0) || (strcmp(findFileData.cFileName, "TESTTEST") == 0))) {
    
                    //파일 속성을 참조하여 파일이면 암호화 폴더로 넘김
                    //디렉토리이면 재귀 호출 시도
    
                    if ((findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //디렉토리면
    
                        string subFolder = file_path2;
                        subFolder.append("\\");
                        subFolder.append(findFileData.cFileName);
    
                    }
                    else { // 디렉토리가 아닌 파일이면
                        int File_Size = (findFileData.nFileSizeHigh * (MAXDWORD + 1)) + findFileData.nFileSizeLow;
    
                        //File_In_Out(file_pt, File_Size);
                    }
                }
                else {
                    if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0))) {
                        printf("예외 설정 파일 : %s\n", findFileData.cFileName);
                    }
                }
                //다음 File Handle로 접근
            } while (FindNextFile(hFileHandle, &findFileData));
        }
        //파일을 찾은 후 핸들 종료
        FindClose(hFileHandle);
    }
    
    int main(void) {
        char file_path[_MAX_PATH] = "D:\TEST";
        printf("파일 서치 시작\n");
        FindAllFiles(file_path);
    
        return 0;
    }
    

    <오류>

    이미지

  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.01.17

    C언어 기반 파일 탐색 프로그램 "HEAP CORRUPTION DETECTED" 오류


    컴퓨터에 있는 특정 폴더를 제외한 파일 전체를 탐색하는 프로그램을 작성중입니다. 실행하면 "HEAP CORRUPTION DETECTED" 라는 디버그 에러가 발생하는데 이 에러가 발생하는 경우는

    • 메모리 할당이 되지 않은 포인터(NULL Pointer)에 값을 넣음
    • 할당치를 초과하여 데이터가 입력됨

    라고 나와있어 열심히 코드를 뒤적거리고 수정해봤지만 해결되지 않았습니다 ㅠㅠ!! VisualStudio로 디버깅을 시도했을 땐 do-while문 내에서 발생한다는데.....

    조언 부탁드려요  ʘ̥﹏ʘ 

    #define MAX_LEN 1024
    
    void FindAllFiles(char file_path[]) {
        HANDLE hFileHandle; // File Descriptor Handle
        WIN32_FIND_DATA findFileData; // File Data 구조
    
        char file_path2[_MAX_PATH];
        strcat(file_path, "\\");
        strcpy(file_path2, file_path);
        strcat(file_path, "*");
    
        hFileHandle = FindFirstFile(file_path, &findFileData);
        //찾고 싶은 파일명과 핸들을 얻어옴
    
        if (hFileHandle != INVALID_HANDLE_VALUE) {
            do {//TESTTEST 폴더를 제외하고 탐색
                printf("findFileData.cFileName : %s\n", findFileData.cFileName);
                if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0) || (strcmp(findFileData.cFileName, "TESTTEST") == 0))) {
    
                    //파일 속성을 참조하여 파일이면 암호화 폴더로 넘김
                    //디렉토리이면 재귀 호출 시도
    
                    if ((findFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { //디렉토리면
    
                        string subFolder = file_path2;
                        subFolder.append("\\");
                        subFolder.append(findFileData.cFileName);
    
                    }
                    else { // 디렉토리가 아닌 파일이면
                        int File_Size = (findFileData.nFileSizeHigh * (MAXDWORD + 1)) + findFileData.nFileSizeLow;
    
                        //File_In_Out(file_pt, File_Size);
                    }
                }
                else {
                    if (!((strcmp(findFileData.cFileName, ".") == 0) || (strcmp(findFileData.cFileName, "..") == 0))) {
                        printf("예외 설정 파일 : %s\n", findFileData.cFileName);
                    }
                }
                //다음 File Handle로 접근
            } while (FindNextFile(hFileHandle, &findFileData));
        }
        //파일을 찾은 후 핸들 종료
        FindClose(hFileHandle);
    }
    
    int main(void) {
        char file_path[_MAX_PATH] = "D:\TEST";
        printf("파일 서치 시작\n");
        FindAllFiles(file_path);
    
        return 0;
    }
    

    <오류>

    이미지