1樓:汐日南莘
樓上的說對了,是由於那個記憶體洩露引起的!是會訪問pd[10000],你設定的兩個陣列又是很大的。
你要知道每一個程式在編譯時都會給出一定的記憶體以便執行這個程式。而給出的整個記憶體不同的地方功能是不同的。要給出放置10000個數字和3000個數字,和放置整型變數i,j,k的記憶體!
但當訪問到pd[10000]時因為事先沒有放置這個數的空間,所以會隨機訪問其它的地方!這時很有可能是訪問了k的記憶體,致使k變成了1.因為你設定的陣列太大了,導致程式空餘的記憶體幾乎沒有了,所以才會訪問k。
把k變成1.
你看看我吧10000改成10後就不會了,輸出的k是0,因為陣列小,程式的空餘記憶體多。所以當溢位時可以訪問空餘的記憶體,那麼就不會改變k值!
#include
using namespace std;
int main()
printf("%d",k);
return 0;}
2樓:
雖然不知道編譯器怎樣最終決定的記憶體佈局,不過這個首先明顯記憶體洩露了bool pd[10000];
下標為0到9999
for(j=2;j<=(10000/i);j++)在i==2時訪問到了j=5000 * 2 = pd[10000]的地址,這個地址是錯誤的
很可能這些錯誤中,在巧合的情況下,修改了變數k所在的記憶體
3樓:
for(i=2;i<=10000;i++)此行的最後一次迴圈改變的,你已經寫到了陣列外面,而外面的那個位置正好是k所在的位置.
pd[10000]不是超出陣列了嗎?剛才好符合if (!pd[i])的要求.
4樓:匿名使用者
memset(p,0,sizeof(p));
memset(pd,0,sizeof(pd));
5樓:小鉛筆頭的祕密
gcc 編譯結果為0
c++ 最好用cout 吧
奇怪的現象啊,奇怪的現象?
呵呵 不用看了,200hz的重新整理,開什麼玩笑啦,這種顯示器除了高階的還沒有見過。高階的一般也是800 600到120就不得了啦。200hz的顯示器頻寬估計是要到300 呵呵 吹牛了哦。如果640 480 刷200,那麼頻寬165就可以了,不過相信沒有人17顯示器還在用640 480的解析度吧?還...
說個很奇怪的現象,有個很奇怪的現象?
我也遇到過這種事,會突然發現某個場景很熟悉,而且覺得某件事是在夢中夢見過的。原因應該是自己潛意識裡有時候有所想,就會做這樣的夢,然後當自己真的做了的時候就會覺得很熟悉。日有所思,夜有所夢,潛意識在發揮作用 不是預知是感知 一般人都曾有過 也許真的是冥冥之中吧 不是所有的問題都有答案 留一份念想 留一...
C 程式設計,C 程式設計的軟體哪個好?
連結錯誤,沒有源 不知道你那裡的宣告或者定義弄錯了 這種情況應該是編譯通過,但是連結沒有通過的表現,可能存在於多檔案程式設計中,建議注意一下 1 函式呼叫的格式,如參類型別,個數和檔名等 2 有output函式的包含檔案 h 和實現檔案 cpp 的路徑,一般把這兩個檔案加進工程 project 中,...