Code Bye

VS读取发生异常

#include<stdio.h>
#include<stdlib.h>
#include <cstdlib>
//定义文件路径
#define F_Path1 “F:\featuredat+.dat”
#define F_Path2 “F:\featuredat+de.dat”
#define N1 44564
#define N2 963
//关键字typedef用于将结构体重名名
typedef struct
{
int s[128];
}feature;
//定义结构体长度
int leng=sizeof(feature);
int main()
{
feature feature1[N1];
feature feature2[N2];
int i,j,r[N1],m,min[N2],t;
//定义文件指针
FILE * fp1;
FILE * fp2;
//假如文件open失败
if((fp1=fopen(F_Path1,”rb”))==NULL)
{ printf(“\nCan”t open file”);
exit(0);
}
if ((fp2=fopen(F_Path2,”rb”))==NULL)
{
printf(“\nCan”t open file”);
exit(0);
}
//文件打开成功
for(i=0;i<N2;i++)
{
fread(&feature2[i],leng,1,fp1);
min[i]=0;
t=0;
for(j=0;j<N1;j++)
{
fread(&feature1[j],leng,1,fp2);
for(m=0;m<128;m++)
{
r[j]+=(feature2[i].s[m]-feature1[j].s[m])^2;
}
if (j==0||r[j]<min[i])
{
min[i]=r[j];
t=j;
}

}
printf(“%d”,t);
}
}

解决方案

100

feature feature1[N1];
这个一运行肯定崩,栈溢出了
feature结构体占的大小是4*128
feature1[N1]占的大小是128*4*44564/1024/1024=21.76M
不同的编译器和操作系统栈空间略有不同,但一般都在1~10M之间
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
代码功能归根结底不是别人帮本人看或讲解或注释出来的;而是被本人静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生本人领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

50

feature feature1[N1];
改为
feature *feature1;
feature1=(feature *)malloc(N1*sizeof(feature));
容量大小:栈<全局数据区<堆<文件<磁盘<云盘

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明VS读取发生异常