Visual Studio 2008中的System.AccessViolationException

时间:2011-09-05 13:59:43

标签: c++ visual-studio-2008 filestream

// 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并正确点击?

谢谢!

1 个答案:

答案 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,导致函数失败。