| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2084 人关注过本帖
标题:找到错误了,但不知道为什么出错...好像第一次运行还是对的,总之求教啦...
取消只看楼主 加入收藏
神龙赖了
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
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
YES!!!
终于找到错误了:

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

fpos_t在32位的机子上是int及四个字节,我习惯了char类型结果每个fpos_t只给了一个字节,悲剧啊...


(sizeof(fpos_t)*(str_count-1))
猫哥不好意思把你害的这么苦哈,你那个改进后的错误应该也是这个,
一天了虽然做了那么多事 可还是忘不了这道题啊,终于弄完了,不然该不正常了...

在这里中心的感谢各位大牛小牛们的支持,虽然最后还是自己解出来了,
但是还是学到了不少,大概吧...总之谢谢了


I have not failed completely
2013-01-01 21:08
神龙赖了
Rank: 10Rank: 10Rank: 10
来 自:萨塔星
等 级:青峰侠
威 望:2
帖 子:711
专家分:1788
注 册:2012-10-13
收藏
得分:0 
嘻嘻自己解出来百分贴就不报销了啊,毕竟可用分其实也不多嘛...
哎,想不到一个程序就能脱我一天,看来明天作业十有八九又要欠了...
也不知道这样做对不对啊...

I have not failed completely
2013-01-01 21:22
快速回复:找到错误了,但不知道为什么出错...好像第一次运行还是对的,总之求教 ...
数据加载中...
 
   



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

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