调试通过,启动程序初始化失败!!高手求教!!

shanyilei013 2010-02-03 10:29:41
自己写的一个支持mfc的控制台程序,主要功能为读取一个txt文件,扫描每一行中的数据进行一些处理后,将数据存到一个数组里。最后调用一个写图像函数。程序调试通过,但是启动运行的时候出现提示“应用程序正常初始化(0xc0150002)失败。请单击“确定”,终止应用程序”。编程工具vs2008,因为程序很简单,主要源代码如下:

#include "stdafx.h"
#include "test14.h"
#include "ImageWriter.h"
#include <math.h>
#define PI 3.14159

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 唯一的应用程序对象

CWinApp theApp;

struct Point //点结构
{
float x;
float y;
float z;
};

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改错误代码以符合您的需要
_tprintf(_T("错误: MFC 初始化失败\n"));
nRetCode = 1;
}
else
{
// TODO: 在此处为应用程序的行为编写代码。
//下面为自己写的代码
CStdioFile sfile1;


if(!sfile1.Open("3.txt",CFile::modeRead))
{
printf("Open file error!");
return 0;
}


Point pt={0.0,0.0,0.0}; //绝对值最大的x,y,z坐标


unsigned int num=0;

CString strLine;
while(sfile1.ReadString(strLine))
{
num++;
}
sfile1.Close();


float *cha=new float[num*4];
memset(cha,0,sizeof(float)*num*4);
unsigned int num1=0;
CStdioFile sfile5;
if(!sfile5.Open("3.txt",CFile::modeRead))
{
printf("Open file error!");
return 0;
}
CString strLine2;

while(sfile5.ReadString(strLine2))
{
Point pt1;
int i=strLine2.ReverseFind(' ');
int j=strLine2.Find(' ');
CString strData1=strLine2.Mid(i+1,strLine2.GetLength()-i);
CString strData2=strLine2.Mid(0,j);
int k=i-j-1;
CString strData3=strLine2.Mid(j+1,k);
pt1.z=atof(strData1.GetBuffer(0));
pt1.y=atof(strData3.GetBuffer(0));
pt1.x=atof(strData2.GetBuffer(0));
//strData1.ReleaseBuffer();
//strData2.ReleaseBuffer();
//strData3.ReleaseBuffer();
//求所有点中绝对值最大的x,y,z
if(fabs(pt1.x)>fabs(pt.x))
{
pt.x=pt1.x;
}
if(fabs(pt1.y)>fabs(pt.y))
{
pt.y=pt1.y;
}
if(fabs(pt1.z)>fabs(pt.z))
{
pt.z=pt1.z;
}
float sin1=sqrt(pt1.x*pt1.x+pt1.y*pt1.y)/sqrt(pt1.x*pt1.x+pt1.y*pt1.y+pt1.z*pt1.z);
float cos1=pt1.z/sqrt(pt1.x*pt1.x+pt1.y*pt1.y+pt1.z*pt1.z);
float sin2=pt1.y/sqrt(pt1.x*pt1.x+pt1.y*pt1.y);
float cos2=pt1.x/sqrt(pt1.x*pt1.x+pt1.y*pt1.y);
cha[num1]=sin1;
num1++;
cha[num1]=cos1;
num1++;
cha[num1]=sin2;
num1++;
cha[num1]=cos2;
num1++;

}
sfile5.Close();

float rMax=sqrt(pt.x*pt.x+pt.y*pt.y+pt.z*pt.z);
float *data= new float[num*3];
memset(data,0,sizeof(float)*num*3);
unsigned int num2=0; //总的点数乘以3
for(unsigned int j=0;j<num;j++)
{
data[num2]= rMax*cha[4*j]*cha[4*j+3];
num2++;
data[num2]= rMax*cha[4*j]*cha[4*j+2];
num2++;
data[num2]= rMax*cha[4*j+1];
num2++;
}
char *filename="1.tiff";
Boundbox box;
box.Xmax=pt.x;
box.Xmin=-pt.x;
box.Ymax=pt.y;
box.Ymin=-pt.y;
box.Zmax=pt.z;
box.Zmin=-pt.z;
writeToImage(filename,box,data,num,POINT);
delete [] data;
delete [] cha;


system("pause");
}

return nRetCode;
}
...全文
263 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vercitti 2010-02-04
  • 打赏
  • 举报
回复
保证release版本和debug版本的运行环境一致(路径、配置文件)
ls2141 2010-02-04
  • 打赏
  • 举报
回复
。。。雀过留声!!
jyzdtn 2010-02-03
  • 打赏
  • 举报
回复
jf
shanyilei013 2010-02-03
  • 打赏
  • 举报
回复
看了网上很多的问题,说可能是野指针的问题,小弟乃菜鸟,看不出。请高手帮忙看下
shanyilei013 2010-02-03
  • 打赏
  • 举报
回复
没有装sp1补丁,不过补丁我下载好了,可是不能安装,是不是我的vs2008为盗版的缘故?
oyljerry 2010-02-03
  • 打赏
  • 举报
回复
调试是工程目录,你的工程目录下的配置文件是否也放到运行的debug等目录中
stjay 2010-02-03
  • 打赏
  • 举报
回复
或者用静态编译一下试试
stjay 2010-02-03
  • 打赏
  • 举报
回复
装了VS2008 SP1补丁没?
应该是c和MFC运行时库版本不对

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧