问题描述
这样的一段代码char*CreateFilename(constchar*wFilePath,UNITSTRUCTUREUnit){char*FileName=(char*)malloc(strlen(wFilePath)*sizeof(char));strcpy(FileName,wFilePath);char_filename[256]="";if(Unit.bInBoundArea){strcat(_filename,"inside\");}else{strcat(_filename,"outside\");}if(Unit.bCatalysis)strcat(_filename,"C");//char*temp=(char*)malloc(256*sizeof(char));chartemp[20];_itoa(Unit.nYear,temp,10);strcat(_filename,temp);//_itoa(Unit.nMonth,temp,2);if(Unit.nMonth<10){_itoa(Unit.nMonth,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nMonth,temp,10);strcat(_filename,temp);}if(Unit.nDay<10){_itoa(Unit.nDay,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nDay,temp,10);strcat(_filename,temp);}if(Unit.nHour<10){_itoa(Unit.nHour,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nHour,temp,10);strcat(_filename,temp);}if(Unit.nMinute<10){_itoa(Unit.nMinute,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nMinute,temp,10);strcat(_filename,temp);}strcat(_filename,"_");if(Unit.UnitNumber<10){_itoa(Unit.UnitNumber,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.UnitNumber,temp,10);strcat(_filename,temp);}strcat(_filename,".txt");strcat(FileName,_filename);returnFileName;}intmain(intargc,char*argv[]){UNITSTRUCTUREUnit;Unit.nYear=2007;Unit.nMonth=7;Unit.nDay=10;Unit.nHour=5;Unit.nMinute=10;Unit.UnitNumber=0;Unit.CenterX=10;Unit.CenterY=10;Unit.EchoArea=20;UNITSTRUCTURE*FirstUnits=&Unit;intasize=1;for(inti=0;i!=asize;i++){char*FileName=CreateFilename("d:\result\",FirstUnits[i]);ofstream_ofs;_ofs.open(FileName);floatLAT,LON;_ofs<<FirstUnits[i].nYear<<endl;_ofs.close();}deleteFileName;return0;}红色出错位置,TRECOP.exe中的0x7c812a6b处未处理的异常:MicrosoftC++异常:内存位置0x0012fc94处的std::bad_alloc是不是我CreateFileName这个函数有问题?UNITSTRUCTURE是我自己定义的结构体
解决方案
解决方案二:
求高手解决啊
解决方案三:
如果去掉char*FileName=CreateFilename("d:\result\",FirstUnits[i]);运行就正常,求高手啊。
解决方案四:
可以确定是CreateFilename函数问题,我去掉了其中生成的语句,让FileName变的短一点,就运行成功,这个问题是在什么地方啊?大牛都没起床吗?求教啊!
解决方案五:
引用3楼msdnsyh的回复:
可以确定是CreateFilename函数问题,我去掉了其中生成的语句,让FileName变的短一点,就运行成功,这个问题是在什么地方啊?大牛都没起床吗?求教啊!
你在CreateFilename函数里面设断点调试一下就知道问题在哪了
解决方案六:
引用4楼q342210738的回复:
引用3楼msdnsyh的回复:可以确定是CreateFilename函数问题,我去掉了其中生成的语句,让FileName变的短一点,就运行成功,这个问题是在什么地方啊?大牛都没起床吗?求教啊!你在CreateFilename函数里面设断点调试一下就知道问题在哪了
你看我这个函数写的对不对?
解决方案七:
引用5楼msdnsyh的回复:
引用4楼q342210738的回复:引用3楼msdnsyh的回复:可以确定是CreateFilename函数问题,我去掉了其中生成的语句,让FileName变的短一点,就运行成功,这个问题是在什么地方啊?大牛都没起床吗?求教啊!你在CreateFilename函数里面设断点调试一下就知道问题在哪了你看我这个函数写的对不对?
先告诉你我发现的三个问题:1、inta=strlen(wFilePath)
得到得到的a永远=4,跟你的wFilePath取值无关,这是指针的原理2、没有这种用malloc分配内存,在后面用delete清理内存的用法3、UNITSTRUCTUREUnit;Unit.nYear=2007;Unit.nMonth=7;Unit.nDay=10;Unit.nHour=5;Unit.nMinute=10;Unit.UnitNumber=0;Unit.CenterX=10;Unit.CenterY=10;Unit.EchoArea=20
这几句没必要这样写,你可以为结构体写一个构造函数,然后写成UNITSTRUCTUREUnit(2007,7,10,5...)
的方式
解决方案八:
引用5楼msdnsyh的回复:
引用4楼q342210738的回复:引用3楼msdnsyh的回复:可以确定是CreateFilename函数问题,我去掉了其中生成的语句,让FileName变的短一点,就运行成功,这个问题是在什么地方啊?大牛都没起床吗?求教啊!你在CreateFilename函数里面设断点调试一下就知道问题在哪了你看我这个函数写的对不对?
你没有把UNITSTRUCTURE的定义写出来,我无法帮你调试
解决方案九:
typedefstructunitstructure{intUnitNumber;intCenterX;intCenterY;intnYear;intnMonth;intnDay;intnHour;intnMinute;boolbCatalysis;boolbContrastive;boolbInBoundArea;floatRI;shortMaxAreaEcho;floatEchoArea;floatET;shortMaxVolumeEcho;shortMaxEchoHeight;}UNITSTRUCTURE;这个是结构体malloc我已经改了
解决方案十:
帮你改完了,可以运行了~~不过这一句ofstream_ofs;
可能会使你打开文件不成功,注意open的参数#include"stdafx.h"#include<stdlib.h>#include<fstream>usingnamespacestd;typedefstructunitstructure{intUnitNumber;intCenterX;intCenterY;intnYear;intnMonth;intnDay;intnHour;intnMinute;boolbCatalysis;boolbContrastive;boolbInBoundArea;floatRI;shortMaxAreaEcho;floatEchoArea;floatET;shortMaxVolumeEcho;shortMaxEchoHeight;}UNITSTRUCTURE;char*CreateFilename(constchar*wFilePath,UNITSTRUCTUREUnit){char_filename[256]="";if(Unit.bInBoundArea){strcat(_filename,"inside\");}else{strcat(_filename,"outside\");}if(Unit.bCatalysis)strcat(_filename,"C");//char*temp=(char*)malloc(256*sizeof(char));chartemp[20];_itoa(Unit.nYear,temp,10);strcat(_filename,temp);//_itoa(Unit.nMonth,temp,2);if(Unit.nMonth<10){_itoa(Unit.nMonth,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nMonth,temp,10);strcat(_filename,temp);}if(Unit.nDay<10){_itoa(Unit.nDay,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nDay,temp,10);strcat(_filename,temp);}if(Unit.nHour<10){_itoa(Unit.nHour,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nHour,temp,10);strcat(_filename,temp);}if(Unit.nMinute<10){_itoa(Unit.nMinute,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.nMinute,temp,10);strcat(_filename,temp);}strcat(_filename,"_");if(Unit.UnitNumber<10){_itoa(Unit.UnitNumber,temp,10);strcat(_filename,"0");strcat(_filename,temp);}else{_itoa(Unit.UnitNumber,temp,10);strcat(_filename,temp);}strcat(_filename,".txt");size_tbuf_size=strlen(wFilePath)*sizeof(char)+strlen(_filename)*sizeof(char)+1;char*FileName=newchar[buf_size];strcpy(FileName,wFilePath);strcat(FileName,_filename);returnFileName;}intmain(intargc,char*argv[]){UNITSTRUCTUREUnit;Unit.nYear=2007;Unit.nMonth=7;Unit.nDay=10;Unit.nHour=5;Unit.nMinute=10;Unit.UnitNumber=0;Unit.CenterX=10;Unit.CenterY=10;Unit.EchoArea=20;UNITSTRUCTURE*FirstUnits=&Unit;intasize=1;for(inti=0;i!=asize;i++){char*FileName=CreateFilename("d:\result\",FirstUnits[i]);ofstream_ofs;_ofs.open(FileName);floatLAT,LON;_ofs<<FirstUnits[i].nYear<<endl;_ofs.close();delete[]FileName;}return0;}
解决方案十一:
constcharfilename[]="RuntimeMonitor.txt";ofstreamo_file;//写o_file.open(filename,ios_base::app);
解决方案十二:
C++那些变量搞死人,到底是人开发程序,还是程序开发人
解决方案十三:
好久没看了,自己搞定的,散分!