堆栈溢出(参数:0x00000001、0x00442FF8)
Stack overflow (parameters: 0x00000001, 0x00442FF8)
算法检查变量"a"answers"x"是否都是素数。如果是,它只是简单地宣布这些是素数。需要50个,当涉及到第六个位置时,程序显示错误:
ConsoleApplication3.exe中0x00D02509处引发异常:0xC00000FD:堆栈溢出(参数:0x00000001、0x002D2F5C)。ConsoleApplication3.exe中0x00D02509处未处理的异常:0xC00000FD:堆栈溢出(参数:0x00000001、0x002D2F5C)。
#include "stdafx.h"
#include <iostream>
using namespace std;
int CheckIfPrime(long int n)
{
if (n<2) return 0;
for (int i = 2; i*i <= n; i++)
if (n%i == 0) return 0;
return 1;
}
int pow(int ap, int nt)
{
if (nt == 0)
return 1;
else
return ap *= pow(ap, --nt);
}
void CountA(int *aValue, int x)
{
*aValue = (pow(2, x) - 1);
}
int main()
{
int x = 1;
int a = 0;
int *aPointer = &a;
for (int i = 0; i <= 50;)
{
x++;
if (CheckIfPrime(x))
{
CountA(aPointer, x);
if (CheckIfPrime(a))
{
cout << i << ". X = " << x << " a = " << a << " are prime " << endl;
i++;
}
}
else
{
cout << "";
}
}
getchar();
return 0;
}
函数中存在堆栈溢出:
int pow(int ap, int nt)
{
if (nt == 0)
return 1;
else
return ap *= pow(ap, --nt);
}
对于非常大的nt,它将在递归中进入太深,导致SO
您正试图为x
的一些相当大的值计算精确的整数2的幂x
。任何普通的数据类型都不能容纳该值。但是,如果你有一个数据类型保持这个值,那么用这种简单的方法测试结果减去1是否是素数将比宇宙的生命花费更多的时间。
你在攻击一个非常困难、研究得很好的问题,只把天真的无知当作工具。
https://primes.utm.edu/mersenne/
相关文章:
- 面临分段故障 使用 ffmpeg 读取视频时,因为"pFormatCtx-> streams [i]-> codecpar"的地址0x00
- 错误:数字常量 #define BOOT_PROTOCOL 0x00 之前的预期'>'
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 如何找到导致"malloc(): memory corruption: 0x00"的线
- malloc: 对象 0x00 的 *** 错误:未分配正在释放的指针
- 为什么 vtables 有 sizeof(void*) * 2 字节的0x00填充?
- 内存集为 0 和 0X00
- 如何使用QtQSerialPort发送十六进制0x00
- 将0x00表示为字符串的文件
- 堆栈溢出(参数:0x00000001、0x00442FF8)
- 为什么我的字节数组被分割在0x00当我插入到我的数据库(SQL SERVER, c++)
- 通过I2C发送0x00