// 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打开然后关闭,然后弹出一个窗口,其中显示: “diskbin.exe中发生了'System.AccessViolationException'类型的未处理异常 附加信息:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。“可能是什么问题?我没有分配s并正确点击?
谢谢!
答案 0 :(得分:2)
因为你正在使用未初始化的变量而崩溃:
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
可能是负数或非常大的数字而新的将失败。
检查stat()返回的错误,尽管找不到文件key.pc.db
,导致函数失败。