// diskbin.cpp : main project file.
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <stdio.h>
#include <sys/stat.h>
using namespace std;
int main( int argc, char *argv[] )
{
//code
if(stat("key.pc.db", &filek) ==0 )
sizek=filek.st_size;
if(stat("seek.pc.db", &files) ==0 )
sizes=files.st_size;
sizek=sizek/sizeof(int);
sizes=sizes/sizeof(int);
int i,min,max,mid;
int *s=new int[sizes];
int *hit=new int[sizes];
//code
}
当我在Visual Studio 2008中运行这个程序时,我没有得到任何错误,但是当我运行cmd打开然后关闭时,弹出窗口显示:"类型为'System '的未处理异常。在diskbin.exe中发生了AccessViolationException附加信息:试图读取或写入受保护的内存。这通常表明其他记忆已经损坏。"有什么问题吗?我没有正确分配s和命中吗?
谢谢!
程序会崩溃,因为你使用了未初始化的变量:
int sizes, sizek;
struct stat files, filek;
ofstream ofs;
if(stat("key.pc.db", &filek) ==0 )
sizek=filek.st_size;
if(stat("seek.pc.db", &files) ==0 )
sizes=files.st_size;
sizek=sizek/sizeof(int);
sizes=sizes/sizeof(int);
如果stat()失败,则使用未初始化的sizek。根据未初始化的内存,您的下一条语句将崩溃:
int *s=new int[sizes];
因为sizes
可以是负数或非常大的数字,new将失败。
检查stat()返回的错误,尽管可能没有找到文件key.pc.db
,导致函数失败