#include <stdio.h>
#include <stdint.h>
int p()
{
char data[7]="Hello!\0";
uint64_t *ptr=((uint64_t)data + 0x18);
printf("%s",data);
(*ptr)-=10;
return 0x00;
}
int main(int argc,char **argv)
{
p();
}
回答
你有什麼是未定義的行爲。
char data[7]="Hello!\0";
寫入到陣列出界導致未定義behavior.This是不爲空終止string.You可以選擇的選項下面一個正確的方式。
將其更改爲
char data[7]="Hello!";
,你甚至可以有
char data[]="Hello!";
編輯:
通過這樣做
uint64_t *ptr=((uint64_t)data + 0x18);
你快把你的指針指向哪個不是由you.Later分配一些內存位置,您嘗試寫入到這個位置
(*ptr)-=10;
所以訪問數組越界或寫入到不是由你分配一些內存導致未定義的行爲。您需要先解決它們
甚至更好,把它留給編譯器,'char data [] =「Hello!」;' – 2015-02-23 12:23:12
@SouravGhosh是的,我會採取的。 – Gopi 2015-02-23 12:23:32
你能解釋一下這個數組是如何走出界限的嗎? – 2015-02-23 12:25:19
正如在其他答案和評論中提到的寫作char data[7]="Hello!\0";
可能是一個問題,但我不認爲這是問題的唯一來源。
我的猜測是: uint64_t *ptr=((uint64_t)data + 0x18);
(*ptr)-=10;
通過從堆棧這樣做可能要修改寄信人地址或做類似的東西。
- 1. 爲什麼這段代碼進入無限循環?
- 2. 這段代碼爲什麼會進入無限循環
- 3. 爲什麼這個for循環進入無限循環執行?
- 4. 爲什麼這個C代碼(for-loop)永遠循環?
- 5. 爲什麼我的代碼不會進入這個循環?套接字編程
- 6. 爲什麼我用這個簡單的Python代碼進入無限循環?
- 7. 這個循環爲什麼不循環?
- 8. 爲什麼這個循環不循環?
- 9. 爲什麼我的JavaScript代碼進入無限循環?
- 10. 代碼進入無限循環,不知道爲什麼
- 11. 爲什麼我的java代碼進入無限循環?
- 12. 爲什麼我的代碼不能進入循環?
- 13. 爲什麼不這個JavaScript(jQuery)進入無限循環?
- 14. 爲什麼這Yampa球彈跳進入一個無限循環?
- 15. Python,爲什麼這個函數進入死循環
- 16. 爲什麼這個VBA代碼無限循環?
- 17. 爲什麼這個VBA代碼不會循環?
- 18. 爲什麼這個for循環執行「else」代碼塊?
- 19. 這段代碼爲什麼給我一個無限循環?
- 20. 爲什麼這段C代碼最終會陷入無限循環?
- 21. 爲什麼我的代碼的這部分不遵循循環?
- 22. 爲什麼這個C++代碼崩潰?
- 23. 這個C代碼爲什麼編譯?
- 24. 爲什麼這個C代碼有效?
- 25. 爲什麼這個c程序陷入無限循環?
- 26. 爲什麼它進入無限循環
- 27. 我爲什麼要進入循環?
- 28. 爲什麼不能進入while循環?
- 29. 爲什麼代碼跳過for循環
- 30. Android:爲什麼我的代碼循環?
什麼循環?你的意思是它永遠掛起? – 2015-02-23 12:18:05
你有*兩個*問題,都導致[*未定義行爲*](http://en.wikipedia.org/wiki/Undefined_behavior)。實際上,他們都是同樣的問題,但以兩種不同的方式表達。問題是你正在寫兩個*位置的'data'數組的邊界。 – 2015-02-23 12:19:56
而且,鑄造'(unit64_t)數據'?這是什麼意思? – 2015-02-23 12:21:04