Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Project3.exe中0x00C61540处未处理的异常:0xC0000005:访问冲突读取位置0x00000003_C++ - Fatal编程技术网

C++ Project3.exe中0x00C61540处未处理的异常:0xC0000005:访问冲突读取位置0x00000003

C++ Project3.exe中0x00C61540处未处理的异常:0xC0000005:访问冲突读取位置0x00000003,c++,C++,每当再次运行此程序时,我都会遇到一个错误。基本上,它所做的是将一些信息写入文件,如果文件不存在,则创建该文件。但是,当它第二次运行时,它需要读取以前创建的文件,由于某种原因,该文件会引发异常,我得到以下错误: Project3.exe中0x00C61540处的未处理异常:0xC0000005:访问冲突读取位置0x00000003 调试器指向函数getBalance中的第15行作为引发异常的位置。然而,实际上我不止一次调用这个函数,它只在我第二次调用它时抛出异常 int getBalance(in

每当再次运行此程序时,我都会遇到一个错误。基本上,它所做的是将一些信息写入文件,如果文件不存在,则创建该文件。但是,当它第二次运行时,它需要读取以前创建的文件,由于某种原因,该文件会引发异常,我得到以下错误:

Project3.exe中0x00C61540处的未处理异常:0xC0000005:访问冲突读取位置0x00000003

调试器指向函数getBalance中的第15行作为引发异常的位置。然而,实际上我不止一次调用这个函数,它只在我第二次调用它时抛出异常

int getBalance(int lineno){ // Funciton to convert strings in file to ints
    string balance;
//Getting information from the file about locations
int *pointer;
pointer = findNewLines();
static int linenopos[10];

for (int i = 0; i < 11; i++){
    linenopos[i] = *(pointer + i);
}

int balanceInt;

//Opening file
balanceFile.open("E:\\MoneyStuff\\balance.txt", ios::in | ios::out); //Exception is thrown here

//Getting Balances
balanceFile.seekg(linenopos[(lineno - 1)], ios::beg);
getline(balanceFile, balance);

balanceFile.close();

stringstream convert(balance);//Variable to convert string balance to integer balance

//Converting balance string to int
convert >> balanceInt;

//Setting balanceInt to 0 if the file doesn't exist
if (balanceInt < -30000)
    balanceInt = 0;

return balanceInt;
}
int-getBalance(int-lineno){//将文件中的字符串转换为int的函数
弦天平;
//从文件中获取有关位置的信息
int*指针;
指针=findNewLines();
静态int-linenopos[10];
对于(int i=0;i<11;i++){
linenopos[i]=*(指针+i);
}
整数平衡整数;
//打开文件
balanceFile.open(“E:\\MoneyStuff\\balance.txt”,ios::in | ios::out);//这里抛出异常
//取得平衡
balanceFile.seekg(linenopos[(lineno-1)],ios::beg);
getline(余额文件、余额);
balanceFile.close();
stringstream convert(balance);//将字符串余额转换为整数余额的变量
//将平衡字符串转换为int
转换>>平衡点;
//如果文件不存在,请将balanceInt设置为0
如果(余额<-30000)
平衡点=0;
返回平衡点;
}
编辑:好的,我更正了代码中试图访问数组中不存在的元素的部分,但仍然得到相同的异常。只有当我尝试读取以前创建的文件时,才会出现异常,所以这可能与权限有关吗

注意:这是我第一次在这里提问,所以如果我需要给你们更多的代码或信息,请告诉我!谢谢你的代码

static int linenopos[10];
for (int i = 0; i < 11; i++)

当您声明一个包含10个元素的数组时,这意味着您的索引从
0
9

将回路调整为:

for (int i = 0; i < 10; i++)

如果错误代码是“访问冲突读取位置0x00000003”,则表示您正在尝试从null+3读取值


您的findNewLines()函数可能没有返回所需的内容。

for循环有
11
,请参阅:

static int linenopos[10];

for (int i = 0; i < 11; i++){
static int linenopos[10];
对于(int i=0;i<11;i++){
正确的答案是“10”:

static int linenopos[10];
对于(int i=0;i<10;i++){
但最好的方法是在循环前计算项目数(如果有机会升级向量),请尝试:

static int linenopos[10];
int size=sizeof(linenopos)/sizeof(linenopos[0]);//计数项目
对于(int i=0;i
或者使用向量大小,如下所示:

const int size = 10;//vector size

static int linenopos[size];

for (int i = 0; i < size ; i++){
const int size=10;//向量大小
静态int linenopos[大小];
对于(int i=0;i
从技术上讲,它可以做任何事情,不仅仅是崩溃,而是+1,因为这几乎可以肯定是根本原因。感谢您提供的信息,我不知道当您声明它时,它不从0开始计数……但是,我尝试了这一点,它仍然抛出相同的异常。而且,它只发生在我从创建的文件读取时,所以我认为这不是问题除了您的主要问题之外,这个问题还有一些其他问题:您应该初始化
balanceInt
,或者检查
>
是否失败。如果
convert>>balanceInt
失败(例如
balance
不包含可读的整数)然后,当您检查
-30000
时,您将访问一个未初始化的值。您还必须检查
lineno>0
lineno Hi!我的答案解决了您的问题?如果是,请检查为“正确”,如果不是,请告诉我缺少什么。请参阅了解如何在您的帖子中设置代码格式。
static int linenopos[10];

for (int i = 0; i < 11; i++){
static int linenopos[10];

for (int i = 0; i < 10; i++){
static int linenopos[10];

int size = sizeof(linenopos) / sizeof(linenopos[0]);//count items

for (int i = 0; i < size ; i++){
const int size = 10;//vector size

static int linenopos[size];

for (int i = 0; i < size ; i++){