C++ Visual Studio 2008中的System.AccessViolationException异常 //diskbin.cpp:主项目文件。 #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { //代码 如果(stat(“key.pc.db”、&filek)==0) sizek=filek.st_size; if(stat(“seek.pc.db”、&files)==0) 大小=files.st\u大小; sizek=sizek/sizeof(int); 尺寸=尺寸/尺寸(整数); 整数i、最小值、最大值、中间值; int*s=新的int[尺寸]; 整数*命中=新整数[大小]; //代码 }
当我在Visual Studio 2008中运行此程序时,我没有收到任何错误,但当我运行cmd时,它会打开然后关闭,然后出现一个弹出窗口,其中显示: diskbin.exe中发生“System.AccessViolationException”类型的未处理异常 其他信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。“可能是什么问题?”?我没有正确分配s和击球吗C++ Visual Studio 2008中的System.AccessViolationException异常 //diskbin.cpp:主项目文件。 #包括“stdafx.h” #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; int main(int argc,char*argv[]) { //代码 如果(stat(“key.pc.db”、&filek)==0) sizek=filek.st_size; if(stat(“seek.pc.db”、&files)==0) 大小=files.st\u大小; sizek=sizek/sizeof(int); 尺寸=尺寸/尺寸(整数); 整数i、最小值、最大值、中间值; int*s=新的int[尺寸]; 整数*命中=新整数[大小]; //代码 },c++,visual-studio-2008,filestream,C++,Visual Studio 2008,Filestream,当我在Visual Studio 2008中运行此程序时,我没有收到任何错误,但当我运行cmd时,它会打开然后关闭,然后出现一个弹出窗口,其中显示: diskbin.exe中发生“System.AccessViolationException”类型的未处理异常 其他信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。“可能是什么问题?”?我没有正确分配s和击球吗 谢谢 它正在崩溃,因为您正在使用未初始化的变量: // diskbin.cpp : main project file. #
谢谢 它正在崩溃,因为您正在使用未初始化的变量:
// 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
}
如果stat()失败,则使用未初始化的sizek。
根据未初始化的内存,下一条语句将崩溃:
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);
因为size
可以是负数,也可以是非常大的数字,新的将失败
检查stat()返回的错误,尽管可能找不到文件
key.pc.db
,导致函数失败。要么没有收到任何错误,要么收到错误。选择一个,进行一些调试。程序在哪一行崩溃?@Martino I的意思是它没有在错误窗口中显示任何错误。它显示0个错误和0个警告。所以你说它正在编译,但崩溃了。。。它在哪里崩溃?在int*s=newint[size]昨天我问了一个类似的问题,有人建议我使用新的。我没有一个常量值来分配它。我还能做什么?不要使用常量值。原因是stat()失败,您应该对此进行调查,而不是为了使代码正常工作而更改代码。检查文件是否在那里。同时查看并查找失败的原因。@Richa-不要使用未初始化的变量,正如这个答案所说。如果不使用未初始化变量的固定版本仍然崩溃,请返回并告诉我们它在哪里崩溃。非常感谢:)收到,我将文件存储在错误的位置。
int *s=new int[sizes];