首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 再来一个问题,不知道是不是跟内存有关,老是运行到一半就停了?代码有点多,但注释还比较详细,麻烦大家帮忙看看 [已结贴,结贴人:nosweat_nosweet]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:18:04 楼主
    C/C++ code
    #include <iostream.h> //#include "check3.h" #include <memory> #include <fstream.h> //这是一个把整型转换为字符串的函数////////////// char* chgnum2str(int fl) { char ch[]={" "}; if(fl>=1000) { ch[0]=fl/1000+48; ch[1]=(fl-(ch[0]-48)*1000)/100+48; ch[2]=(fl-(ch[0]-48)*1000-(ch[1]-48)*100)/10+48; ch[3]=fl-(ch[0]-48)*1000-(ch[1]-48)*100-(ch[2]-48)*10+48; } else if (fl>=100)//大于100但小于1000的时候第一位置为空格 { ch[0]=32; ch[1]=fl/100+48; ch[2]=(fl-(ch[1]-48)*100)/10+48; ch[3]=fl-(ch[1]-48)*100-(ch[2]-48)*10+48; } else if(fl>=10)//大于10但小于100的时候第一二位置为空格 { ch[0]=32; ch[1]=32; ch[2]=fl/10+48; ch[3]=fl-(ch[2]-48)*10+48; } else { ch[0]=32; ch[1]=32; ch[2]=32; ch[3]=fl+48; } return ch; } /////////主函数////////// void main() { int i=3; for (i=0; i<2000; i++) { char input_name[100]={"h:\\1A2P_md01dat\\"};//部分文件名 char input_name3[]={"_1A2P_md01.dat"};//部分文件名 char output_name[100]={"h:\\1A2P_md01net2\\"};//部分文件名 char output_name3[]={".dat"};//部分文件名 if(chgnum2str(i)[0]!=32) { char input_name2[]={" "}; for (int j=0; j<4; j++) { input_name2[j]=chgnum2str(i)[j]; } strcat(input_name,input_name2); strcat(input_name,input_name3);//得到完整的文件名 } else if (chgnum2str(i)[1]!=32)//大于100小于1000的时候把第一位的空格去掉,保留非空格位 { char input_name2[]={" "}; for (int j=0; j<3; j++) { input_name2[j]=chgnum2str(i)[j+1]; } strcat(input_name,input_name2); strcat(input_name,input_name3);//得到完整的文件名 } else if (chgnum2str(i)[2]!=32))//大于10小于100的时候把第一二位的空格去掉,保留非空格位 { char input_name2[]={" "}; for (int j=0; j<2; j++) { input_name2[j]=chgnum2str(i)[j+2]; } strcat(input_name,input_name2); strcat(input_name,input_name3);//得到完整的文件名 } else { char input_name2[]={" "}; input_name2[0]=chgnum2str(i)[3]; strcat(input_name,input_name2); strcat(input_name,input_name3);//得到完整的文件名 } if(chgnum2str(i)[0]!=32) { char output_name2[]={" "}; for (int j=0; j<4; j++) { output_name2[j]=chgnum2str(i)[j]; } strcat(output_name,output_name2); strcat(output_name,output_name3);//得到完整的文件名 } else if (chgnum2str(i)[1]!=32) { char output_name2[]={" "}; for (int j=0; j<3; j++) { output_name2[j]=chgnum2str(i)[j+1]; } strcat(output_name,output_name2); strcat(output_name,output_name3);//得到完整的文件名 } else if (chgnum2str(i)[2]!=32) { char output_name2[]={" "}; for (int j=0; j<2; j++) { output_name2[j]=chgnum2str(i)[j+2]; } strcat(output_name,output_name2); strcat(output_name,output_name3);//得到完整的文件名 } else { char output_name2[]={" "}; output_name2[0]=chgnum2str(i)[3]; strcat(output_name,output_name2); strcat(output_name,output_name3);//得到完整的文件名 } fstream input(input_name,ios::in);//输入文件 ofstream output(output_name,ios::out);//输出文件 Node* node;//Node是一个类,运行错误应该与无关,因为没有对它进行什么操作 node =new Node; delete node; output.close(); input.close(); } }


    运行过程跳出对话框,提示内存不能为"written",一开始以为是windows内存问题,重启几次都不管用,
    个人猜测是不是建立了太多对象的原因啊?
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:22:251楼 得分:13
    C/C++ code
    //你的代码不全,下面是给你部分修改的函数. char* chgnum2str(int fl) { static char buff[32]; sprintf(buff, "%d", fl); return buff; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:25:452楼 得分:13
    也有可能是Node构造有问题
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lixingke
    • 等级:
    发表于:2008-07-06 11:37:003楼 得分:12
    问题出在这里
    char* chgnum2str(int fl)

    在程序进入你这个函数的时候,你写了这样的一句话 char ch[]={"    "};
    就是说,你在stack中开辟了一段内存,而这段内存当你退出这个函数的时候是会被自动释放的,
    但是你偏偏要返回对这段内存的引用,这就出问题了:
    一方面OS要释放这段内存,另一方面你又要引用他,所以这当然要出问题了,我根本就没看你的程序,我看了你这个函数原型就知道要出问题

    建议看下指针的基本知识,以及在程序的运行中,变量是怎么分配以及存储的!


    超人兄的建议:
    --结贴是种美德,俺分不要多,1分足以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 11:58:274楼 得分:0
    对,代码是不全的,但就以上的代码运行起来,也是出现这个错误的,所以我觉得就是上面的代码有问题,另外,二楼的兄弟,我把Node的东西都注释掉,还是有这个问题的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-06 12:10:535楼 得分:12
    char ch[]={"    "};
    改为
    static char ch[]={"    "};看看
    记得加个memset(ch,0,sizeof(ch));
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved