C++ 用二维阵列求解C++;
我不确定我的程序到底出了什么问题。它编译时不会出错,但它甚至无法正确运行第一个函数。我试着请一些朋友帮我解决这个问题,但他们没有帮助 我希望有人能帮助我,至少让我知道我犯了一个错误,但还没有发现 头文件(sieve.h):C++ 用二维阵列求解C++;,c++,arrays,dynamic,matrix,primes,C++,Arrays,Dynamic,Matrix,Primes,我不确定我的程序到底出了什么问题。它编译时不会出错,但它甚至无法正确运行第一个函数。我试着请一些朋友帮我解决这个问题,但他们没有帮助 我希望有人能帮助我,至少让我知道我犯了一个错误,但还没有发现 头文件(sieve.h): #包括 #包括 #包括 #包括 使用名称空间std; 无效FindPrimeNumber(int**,int); 无效打印素数(整数**,整数); 无效FindPrimeNumber(整数**arr,整数n) { 对于(int x=2;x STD::向量< /代码>等等。这一
#包括
#包括
#包括
#包括
使用名称空间std;
无效FindPrimeNumber(int**,int);
无效打印素数(整数**,整数);
无效FindPrimeNumber(整数**arr,整数n)
{
对于(int x=2;x 您这里有一个问题:
//deallocate the array
for(int i = 0; i < row; i++)
{delete[] arr[i];
delete[] arr;}
理想情况下,尽管您甚至不应该像这样使用原始数组,但请使用std::vector
int z = arr[1][x];
在findPrimeNumber
函数中发生这种情况时,arr[1][x]
尚未初始化,这意味着您在尝试读取该值时有未定义的行为
除此之外,你所做的没有任何意义,似乎也不是埃拉托斯坦筛的实现。你不需要一个二维数组,你需要一个布尔值的一维数组。处理完成后,arr[N]
如果N
是素数,则应为true
,如果N
不是素数,则应为false
。你为什么要使用2D数组?我正试图教自己如何正确使用动态创建的2D数组。我的教授从未真正教过我如何正确使用2D数组。当然-但你打算如何将2D数组用于一维数组像这个筛子这样的算法?抛开对2d数组的需求不谈,为什么你要在没有初始化的情况下读取数组值?我不知道怎么做。我如何才能将数组的值从1声明为最大值?老实说,这只是一个小问题,而不是主要问题的根本原因。@Doc:是的,这不是根本原因,但我知道这是一个严重的错误,它还突出了代码格式错误的问题(很难发现简单的错误)不知道这是为什么我要尝试使用这个。好的,如果你要正确地学习C++,你就需要真正掌握C++语言和标准容器类,比如“代码> STD::向量< /代码>等等。这一点可能看起来很有挑战性,但最终它比用指针乱搞要容易得多,也更健壮。是的,好的,我找到了关于向量的部分。现在读。
//deallocate the array
for(int i = 0; i < row; i++)
{delete[] arr[i];
delete[] arr;}
//deallocate the array
for(int i = 0; i < row; i++)
{
delete[] arr[i];
}
delete[] arr;
int z = arr[1][x];