免费例外c

时间:2011-03-13 15:00:14

标签: c winapi free

我在函数的最后一行得到一个异常,这是一个与free有关的异常。这里是: Windows已在HW1.exe中触发了断点。

这可能是由于堆损坏,这表示HW1.exe或其加载的任何DLL中存在错误。

这也可能是由于用户在HW1.exe有焦点时按下F12。

输出窗口可能包含更多诊断信息。

 void unicode(HANDLE file, DWORD sizeOfFile, int N) {
        if(sizeOfFile - 2 == 0)
            return;

        _TCHAR* text = (_TCHAR*)malloc(sizeOfFile);

        DWORD numRead = 0;

        BOOL read = ReadFile(file, text, sizeOfFile, &numRead, NULL);
        assert(read && (sizeOfFile == numRead));

        int i = 0;
        int lineNum = 0;
        int lineStart = 0;
        text++;
        sizeOfFile--;
        while(i <= sizeOfFile / 2) {
            if(i == sizeOfFile / 2 && lineNum < N) 
                printLineUnicode(text + lineStart, i - lineStart, lineNum++);


            else if(text[i] == '\r') {
                if(lineNum < N) {
                    printLineUnicode(text + lineStart, i - lineStart, lineNum++);
                }
                i ++;
                lineStart = i + 1;          
            }

            i ++;
        }
        i -= 2;

        int lineEnd = i;
        while(i >= 0) {
            if(i == 0 && lineNum < N)
                printLineUnicode(text, lineEnd - i + 1, lineNum++);

            if(text[i] == '\n') {
                if(lineNum < 2*N) {
                    printLineUnicode(text + i + 1, lineEnd - i, lineNum++);
                    lineEnd = i - 2;
                    i --;
                }   
            }
            i --;
        }
        free(text);
    }

3 个答案:

答案 0 :(得分:5)

您正在修改text(请参阅第{1}行),因此在函数末尾,指针将与分配函数返回的指针不同。坏。

保存指针并使用保存的指针释放内存......

答案 1 :(得分:2)

text指向您使用malloc()分配的内存,但随后您执行text++以便不再执行此操作。当您将新值传递给free()时,这是一个错误,因为文本不再指向内存。

答案 2 :(得分:1)

尝试

_TCHAR* buffer = (_TCHAR*)malloc(sizeOfFile);
_TCHAR* text=buffer;

开头

free(buffer);

最后,然后在中间更改text并不介意。