在Project3.exe中0x00C61540的未处理异常:0xC0000005:访问违反读取位置0x00000003
Unhandled exception at 0x00C61540 in Project3.exe: 0xC0000005: Access violation reading location 0x00000003
每当第二次运行这个程序时,我都会得到一个错误。基本上,它所做的是将一些信息写入文件,如果文件不存在则创建该文件。然而,当它第二次运行时,它需要读取之前创建的文件,由于某种原因,它抛出了一个异常,我得到了这个错误:
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;
}
编辑:好吧,所以我纠正了我的代码部分,我试图访问数组中不存在的元素,但我仍然得到相同的异常。异常似乎只发生在我试图从以前创建的文件中读取时,所以它可能与权限有关吗?
注意:这是我第一次在这里提问,所以如果我需要给你们更多的代码或更多的信息,请告诉我!由于
当你声明一个有10个元素的数组,这意味着你的索引从0
到9
。
将循环调整为:
for (int i = 0; i < 10; i++)
试图访问数组中不存在的元素会导致奇怪的行为,crash就是其中之一。
对于open()
引起的异常,捕获它并打印到屏幕上,以获得发生的事情的一些线索:
try {
balanceFile.open("E:\MoneyStuff\balance.txt", ios::in | ios::out);
}
catch (const std::exception& e ) {
std::cout << e.what() << std::endl;
}
如果错误代码说"访问违规读取位置0x00000003",那么这意味着您正在尝试从null+3读取值。
你的findNewLines()函数可能没有返回你想要的结果
for循环有11
,参见:
static int linenopos[10];
for (int i = 0; i < 11; i++){
正确的是"10":
static int linenopos[10];
for (int i = 0; i < 10; i++){
但是最好的方法是在循环之前计数元素(如果有可能升级vector),尝试:
static int linenopos[10];
int size = sizeof(linenopos) / sizeof(linenopos[0]);//count items
for (int i = 0; i < size ; i++){
或者使用vector size,像这样:
const int size = 10;//vector size
static int linenopos[size];
for (int i = 0; i < size ; i++){
在你的代码中
static int linenopos[10];
for (int i = 0; i < 11; i++)
迭代到linenopos数组的末尾。
你应该有
for (int i = 0; i != 10; ++i)
相关文章:
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- 0xC0000005:读取位置0xCDCDCDC1时发生访问冲突
- 0xC0000005:读取位置0xCDCDCDCD时发生访问冲突
- 0x0F50DF58:0xC0000005:访问冲突读取位置0x0047CA04时未处理的异常
- 0xC0000005:访问冲突读取位置0x0000000000000008
- 0xC0000005:访问违规写入位置0x00000034
- OPENCV.3.0错误:0xc0000005:访问违规读取位置0x00000000
- 功能.exe:0xc0000005:访问违规读取地点0x0000000000000000
- 实验室中0x6BE20E11 (ucrtbased.dll) 的未处理异常.exe: 0xC0000005:访问冲突读取
- 在 "<name>.exe" 中0x00007FFF168E1657 (vcruntime140d.dll) 引发异常:0xC0000005:访问冲突写入位置0x0000000000000
- 0xC0000005:访问冲突读取位置0x0000000000000000.C++
- 在2.exe中的0x00DE181818的未经手法异常:0xc0000005:访问违规写作位置0xcd7cbe10
- 在0x77081D76(ntdll.dll)中未经处理的例外.Exe:0xc0000005:访问违规写作位置0x0000
- NVIDIA 在 <work.exe>0xC0000005 中0x002a2da2未处理的异常:访问违规读取位置0x00000000
- C 错误:0xc0000005:访问违规写作位置0xfeeefeee
- 0xC0000005:访问违规写入位置
- 0xC0000005:调用CopyMemory()后发生访问冲突