gpt4 book ai didi

c++ - Visual Studio 2008 中的 System.AccessViolationException

转载 作者:行者123 更新时间:2023-11-28 03:47:02 25 4
gpt4 key购买 nike

// 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’的未处理异常附加信息:试图读取或写入 protected 内存。这通常表明其他内存已损坏。”可能是什么问题?我没有分配 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 可以是负数或一个非常大的数,新的会失败。

检查 stat() 返回的错误,尽管可能找不到文件 key.pc.db,导致函数失败。

关于c++ - Visual Studio 2008 中的 System.AccessViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7309141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com