可能重複:
What is the difference between a stack overflow and buffer overflow ?緩衝區溢出(VS)緩衝區溢出(VS)堆棧溢出
是什麼緩衝區溢出和緩衝區溢出的區別?
Buffer Overrun和Stack Overflow之間的區別是什麼?
請包括代碼示例。我已經看過維基百科中的條款,但我無法與C或C++或Java中的編程相匹配。
可能重複:
What is the difference between a stack overflow and buffer overflow ?緩衝區溢出(VS)緩衝區溢出(VS)堆棧溢出
是什麼緩衝區溢出和緩衝區溢出的區別?
Buffer Overrun和Stack Overflow之間的區別是什麼?
請包括代碼示例。我已經看過維基百科中的條款,但我無法與C或C++或Java中的編程相匹配。
緩衝劑如剛纔陣列的思考。 A 緩衝區溢出是當您嘗試將更多的項目放在數組中比數組可以容納。換句話說,它來自寫作。
A 緩衝區溢出是當您迭代緩衝區並繼續讀取數組末尾時。換句話說,它來自閱讀。
堆棧溢出有很大的不同。大多數現代編程環境都是基於堆棧的,他們使用堆棧數據結構來控制程序流。每次調用函數時,都會在程序的調用堆棧中放置一個新項目。當函數返回時,該項目被彈出堆棧。當堆棧爲空時,程序停止。問題是這個堆棧的大小是固定的,所以一次可以調用太多的函數。此時你有一個堆棧溢出。執行此操作的最常見方法是使用調用自身的函數(遞歸)。
緩衝區溢出/ Bufferoverrun:
void k()
{
BYTE buf[5];
for(int i = 0; i < 10; ++i)
buf[i] = 0xcd;
}
#1:
void f()
{
int k = 0;
f();
}
緩衝區溢出和緩衝區溢出有什麼區別? 我會說緩衝區溢出是當你試圖超出緩衝區的末尾寫入,但你有一個阻止它的檢查。緩衝區溢出是當你實際寫入超出緩衝區的末尾時。第一個失敗很快,第二個難以發現。
您不能在java中溢出緩衝區,因爲它總是有邊界檢查,因此會產生BufferOverflowException。
Buffer Overrun和Stack Overflow之間的區別是什麼?
他們沒有任何關係。
你可以有緩衝區溢出之間的差異和C緩衝區溢出/ C++:
當你填充你的整個堆棧的「內存緩衝區」時,堆棧溢出是有點緩衝區溢出。
維基百科明確指出緩衝區溢出和緩衝區溢出是同義詞。因此,你的問題是你自己的問題在http://stackoverflow.com/questions/1120575 – innaM 2009-07-17 15:44:51
這個任務可能是可以解決的,只是緩衝區溢出和緩衝區溢出之間的區別(答:他們是同一概念的同義詞)。沒有理由讓Wikipedia成爲SO的來源。 – Yishai 2009-07-17 15:47:40