| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2084 人关注过本帖
标题:找到错误了,但不知道为什么出错...好像第一次运行还是对的,总之求教啦...
只看楼主 加入收藏
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
要幸福也要节制,自古红粉如

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-01 17:28
尹金魁2031
Rank: 3Rank: 3
来 自:河南省南阳市
等 级:论坛游侠
帖 子:156
专家分:162
注 册:2012-12-29
收藏
得分:0 
这么长的代码,眼晕呀!飘过!
2013-01-01 18:39
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
程序代码:
if( jilu < (int)length)
        {
            jilu = length;
            temp = buffer;
            free(temp);      -----------》free 掉 temp 上面的TEMP=BUFFER是干什么用的,再就是temp 是初始化过的静态数据 不是放在堆里面的 怎么个free法呀,下面又给这个temp护值为NULL,这个就无法理解了
            temp = NULL;
            buffer = (char*)malloc(length+1);
        }
哦,本意是对buffer指向的空间进行释放,只是第一次忘记给buffer申请空间了,谢谢
fread(&length, sizeof(size_t), 1, Input_pfile);
这个代码也存在问题呀   size_t应该是个int型的,你读4个字节的数据放在一个char类型的数据2个字节里面,敢问这个是要干什么呢。说白了它是会覆盖掉你后面的数据的
size_t str_count = 0;
    fpos_t *postition = NULL;
    char *buffer = NULL;
    size_t length = 0;
    int jilu = 0;
    char *temp = NULL;
    int i = 0;
看到没 length 后面的 int jilu的前两个字节的内容会被这次的操作给覆盖掉
有点不理解...如果length放满了程序会将剩余的数据继续往前写也就是jilu,
但是length也是size_t类型的,应该正好能够接收啊?

实在有点不懂,望指教...

I have not failed completely
2013-01-01 18:46
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你为什么没想过把length打印出来看看它的值到底是多少?

授人以渔,不授人以鱼。
2013-01-01 18:57
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
以下是引用TonyDeng在2013-1-1 14:49:32的发言:

fread(&length, sizeof(size_t), 1, Input_pfile);
T老大求详解啊...

I have not failed completely
2013-01-01 18:58
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
我试试先...

I have not failed completely
2013-01-01 18:59
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

没错啊?

I have not failed completely
2013-01-01 19:02
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册


只是程序依然出错...天哪,坑爹啊...

I have not failed completely
2013-01-01 19:04
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
诡异的事情第N次发生了:
程序代码:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    size_t str_count = 0;
    fpos_t *postition = NULL;
    char *buffer = (char*)malloc(4);
    size_t length = 0;
    size_t jilu = 3;
    char *temp = NULL;
    int i = 0;

    char *Input_filename = "E:\\才、\\Test\\test1.bin";
    char *Out_filename = "E:\\才、\\Test\\test2.bin";
    FILE *Input_pfile = NULL;
    FILE *Out_pfile = NULL;

    if(!(Input_pfile = fopen(Input_filename, "rb")))
    {
        printf("读取文件%s faild!\n",Input_filename);
        return 1;
    }
   
    /* 得到字符串数目 */
    while(1)
    {
        fread(&length, sizeof(size_t), 1, Input_pfile);

        if(feof(Input_pfile))
            break;

        if( jilu < length)
        {
            jilu = length;
            free(buffer);
            buffer = (char*)malloc(length+1);
        }
          fread(buffer, sizeof(char), length, Input_pfile);
          buffer[length] = '\0';
          printf("buffer == %s\nlength == %d\n",buffer, length);
        str_count++;
    }

    printf("The count of strings are %d\n",str_count);

    postition = (fpos_t*)malloc(str_count-1);

    rewind(Input_pfile);

    fread(&length, sizeof(size_t), 1, Input_pfile);
    fread(buffer, sizeof(char), length, Input_pfile);
    buffer[length] = '\0';
    printf("length = %d\n%s\n",length, buffer);

    for(i=0;i<(int)str_count-1;i++)
    {
        fgetpos(Input_pfile, &postition[i]);
        fread(&length, sizeof(size_t), 1, Input_pfile);
        fread(buffer, sizeof(char), length, Input_pfile);
    }

    if(!(Out_pfile = fopen(Out_filename, "wb")))
    {
        printf("error!\n");
        return -1;
    }

    for(i=0;i<(int)str_count-1;i++)
    {
        fsetpos(Input_pfile, &postition[str_count-2-i]);
        fread(&length, sizeof(size_t), 1, Input_pfile);
        fwrite(&length, sizeof(size_t), 1, Out_pfile);
        fread(buffer, 1, length, Input_pfile);
        fwrite(buffer, 1, length, Out_pfile);
    }
    rewind(Input_pfile);
    fread(&length, sizeof(size_t), 1, Input_pfile);
    fwrite(&length, sizeof(size_t), 1, Out_pfile);
    fread(buffer, 1, length, Input_pfile);
    fwrite(buffer, 1, length, Out_pfile);

    fclose(Out_pfile);
    fclose(Input_pfile);

    Out_pfile = fopen(Out_filename, "rb");
    printf("The strings in the %s are:\n",Out_filename);
    for(i=0;i<(int)str_count;i++)
    {
        fread(&length, sizeof(size_t), 1, Out_pfile);
        fread(buffer, sizeof(char), length, Out_pfile);

        buffer[length] = '\0';
        printf("%s\n",buffer);
    }

    fclose(Out_pfile);
    remove(Out_filename);
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册


字符串可以是任意数目出现,可我发现:
程序代码:
size_t str_count = 0;
    fpos_t *postition = NULL;
    char *buffer = (char*)malloc(4);
    size_t length = 0;
    size_t jilu = 3;
    char *temp = NULL;
    int i = 0;

一旦malloc()中的值大于4(如char *buffer = (char*)malloc(5))程序就又会和先前一样出现错误

可是:
程序代码:
        if( jilu < length)
        {
            jilu = length;
            free(buffer);
            buffer = (char*)malloc(length+1);
        }
这里都会对buffer的内存大小进行判断啊,而且无论length的值是什么,一开始buffer申请的空间还是不能超过4个字节

开始是不能多于四个字符串,现在开始申请的字节不能大于4个,
奶奶的我是不是和四有仇啊...

I have not failed completely
2013-01-01 19:44
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
把你的文件放上来看看

授人以渔,不授人以鱼。
2013-01-01 20:21
快速回复:找到错误了,但不知道为什么出错...好像第一次运行还是对的,总之求教 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032011 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved