能不能把这个函数WriteLine()贴全呢?

解决方案 »

  1.   

    paste all of your code : DWORD CTextFile::WriteLine(LPSTR m_str) .
      

  2.   

    已经free的内存块,再free就会出错。检查一下是不是重复free了(比如在某个调用函数里)
      

  3.   

    我看這句話又問題.
    CFile::Write(temp,strlen(temp))
    不是你寫了過多的數據,就使写入了非法数据。
      

  4.   

    完整代码如下
    DWORD CTextFile::WriteLine(LPSTR m_str)
    {
        int i=strlen(m_str);
    char *temp = (char *)malloc(i+2);
    memset(temp,0,strlen(temp));
    strcpy(temp,m_str);
    temp[i]=0x0d;
    temp[i+1]=0x0a;
    CFile::Write(temp,strlen(temp));
    free(temp);
    return 0;
    }
    调试环境下函数返回时,或执行到free(temp)时报错
    debug error!
    program myxxxx.exe
    damage: after normal block(#xxxx)  好像是内存块出了问题,到底是怎么一回事
      

  5.   

    error!
       memset(temp,0,strlen(temp));
        
      

  6.   

    应该改为:
    memset (temp, 0, sizeof(temp));
      

  7.   

    sizeof(temp)求出的只是指針的長度,結果是4,不過不會引起錯誤。
    應該改為:    int i=strlen(m_str);
        char *temp = (char *)malloc(i+3);
        temp[i+2]='\0';
        memset(temp,0,strlen(temp));
        temp[i]=0x0d;
        temp[i+1]=0x0a;
        CFile::Write(temp,strlen(temp));
        free(temp);
        
            
      

  8.   

    这个方法也不保险啊,万一temp中间有个'\x0'呢
    明明已经知道了长度,为什么一定要多此一举再算,直接用不就可以了。
        int i=strlen(m_str);
        char *temp = (char *)malloc(i+2);
        memset(temp,0,i+2 );
        temp[i]=0x0d;
        temp[i+1]=0x0a;
        CFile::Write(temp,i+2 );
        free(temp);
      

  9.   

    DWORD CTextFile::WriteLine(LPSTR m_str)
    {
        int i=strlen(m_str);
        char *temp = (char *)malloc(i+2);
        memset(temp,0,strlen(temp));
        strcpy(temp,m_str);
        temp[i]=0x0d;
        temp[i+1]=0x0a;
        CFile::Write(temp,strlen(temp));
        free(temp);
        return 0;
    }
    出错语句: CFile::Write(temp, strlen(temp));
        改为: CFile::Write(temp, i);
      即可!!
    因为字符串是以 NULL 即0x00 为结束标志,函数
    strlen()对字符串求长必须以NULL为结束标志,否则
    得出的结果不对,在对temp[i] 赋值后,字符串没有
    了结束标志,所以出错! 也可以多申请一个字节的空间,用以放 NULL。
      

  10.   

    若要把回车换行写入文件,用 CFile::Write(temp, i+2);