從main中,我試圖調用mymath.cpp中的一個主要函數 - 它有一些我不明白的奇怪行爲 。 (注意,該算法不工作 - 但是這不是什麼奇怪的是我。)C++指針 - 奇怪的循環行爲
奇怪的是,如果我註釋掉行:
cout << "n:" << lastPrime->pnum <<"\n";
...在mymath.cpp,我的循環在main中只運行兩次。如果我把它放進去,我的主循環一直運行到i = 50;
的main.cpp
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include "stat.h"
#include "mymath.h";
using namespace std;
int main()
{
for (int i = 3; i<= 50; i++)
{
if (isPrime(i))
{
cout << i << " is prime!\n";
}
else
{
cout << i << " is NOT prime\n";
}
}
return 0;
}
MYMATH.CPP
#include "mymath.h"
#include <math.h>
#include <iostream>
using namespace std;
prime two;
prime * lastPrime = &two;
prime * firstPrime = &two;
bool isPrime(long long n)
{
two.pnum=2;
prime * currentPrime = &two;
if (n < 2)
return false;
long long squareRoot = sqrt(n);
while(true)
{
if (n % currentPrime->pnum==0)
{
//n is divisible by a prime number, nothing left to do.
return false;
}
else
{
//n is not divisible by a prime... check next one
{
if (currentPrime->pprime == 0 || currentPrime->pnum > squareRoot)
{
//this is prime
prime addPrime;
addPrime.pnum=n;
addPrime.pprime=0;
lastPrime->pprime=&addPrime;
lastPrime=&addPrime;
cout << "n:" << lastPrime->pnum <<"\n";
return true;
}
else
{
//may not be prime, check next
currentPrime = currentPrime->pprime;
}
}
}
}
return true;
}
謝謝 - 我有點理解。動態分配意味着內存不會被重寫,直到我釋放它。本地非動態分配意味着我的內存可能會重寫,即使我有一個指向它的指針? – MathStudent