如何修复我的 c++ 毕达哥拉斯三重查找器中的'access violation reading location'错误?
How to fix 'access violation reading location' error in my c++ pythagorean triple finder?
我目前正在制作毕达哥拉斯三重探测器。我已经能够让它工作,但现在我正在清理程序返回的结果以避免重复。程序将找到一个毕达格三元组,如 3、4、5,但随后会再次找到相同的三元组 4、3、5。为了解决这个问题,我添加了一些代码,将 Pythag 三元组存储在 3 个数组中:storeA
、storeB
和 storeC
。然后,我有一个函数遍历以前存储的变量,并将每个变量与当前值进行比较。要访问比较函数中的数组,我必须使数组成为全局数组。当我启动程序时,它工作正常,但是当我输入像 10 这样的值时,它会失败并显示错误"访问冲突读取位置0x011F5000"。如果有人能启发我我的错误,我将不胜感激。
repetitionCheck
是我用来比较值的函数。
#include "stdafx.h"
#include <iostream>
using namespace std;
int squared(int input);
bool pythagCheck(int a, int b, int c);
bool repetitionCheck(int a, int b, int c);
int x;
int increment;
int storeA[1000];
int storeB[1000];
int storeC[1000];
int main()
{
int a = 0, b = 0, c = 0;
//input
cout << "Specify Boundary: ";
cin >> x;
cout << "nn";
//function
for (a=0; a<=x; a++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
for (b=0; b<=x; b++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
for (c=0; c<=x; c++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
}
}
}
system("pause");
return 0;
}
int squared(int input)
{
return input * input;
}
bool pythagCheck(int a, int b, int c)
{
if (squared(a) + squared(b) == squared(c) && a != 0 && b != 0 && c != 0)
{
cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
return true;
}
}
bool repetitionCheck(int a, int b, int c)
{
for (int i = 0; i >= increment; i++)
{
if (storeA[i] == b) { return false; }
}
for (int i = 0; i >= increment; i++)
{
if (storeC[i] == c) { return false; }
}
return true;
}
问题出在函数上
bool repetitionCheck(int a, int b, int c)
{
for (int i = 0; i >= increment; i++)
{
if (storeA[i] == b) { return false; }
}
for (int i = 0; i >= increment; i++)
{
if (storeC[i] == c) { return false; }
}
return true;
}
全局变量 increment
未显式初始化。应始终初始化所有变量。
但由于它是一个全局变量,编译器会将其设置为默认值,即 0。
然后调用 repetitionCheck(a, b, c)
函数时,for 循环将几乎永远运行(unitl i 翻转为负数(,因为 i 始终是>= 增量。然后,您可以访问数组索引> 1000,即您的数组大小。
然后你会得到一个赛格错误。
也许你的意思是<=可能是一个简单的错别字。
但。检查你的循环:<=在许多循环中肯定是错误的。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 例外:'Access violation reading location'
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- 如何修复我的 c++ 毕达哥拉斯三重查找器中的'access violation reading location'错误?
- 矩阵 - "Access violation writing location 0x00900B0C" - C++ 中的错误
- 如何修复此代码中的'Access violation reading location'
- 过载时出错 << "Exception thrown: read access violation.m.matrix was 0xCDDDCDDE."
- c++:链表错误" Access violation reading location"
- Q维吉特"access violation"
- System.UStrClr Access Violation
- msftedit "Access violation reading location 0x00000008"错误.dll SetWindowSub类中的RichEdit控件
- CreateBuffer 抛出一个"Access violation reading location"
- glMapBufferRange Access Violation
- 指针已初始化,但我有错误"Access violation reading location 0xCCCCCCCC".为什么?
- VC++ vector::p ush_back "Access Violation" in DLL
- "Read Access Violation: This was nullptr" 以为我分配正确...?