我想計算一個文件中每個單詞的數量。該文件可以是stdin或命令行中提供的文件名(./ count -f filename)。到目前爲止,程序在從命令行讀取文件時會提供正確的輸出。但是當我試圖從標準輸入讀取時發生錯誤。該程序首先輸出正確的結果,然後給出分段錯誤(核心轉儲)。一個有趣的事情是該程序在我的Mac上運行,但它在Linux上不起作用。從標準輸入分段錯誤(核心轉儲)
0
A
回答
0
OK,而不是給你一條魚,我會教你如何釣魚...
當你segmentation fault
這意味着該操作系統已檢測到一個內存訪問錯誤。 當你玩指針時,這通常發生在C/C++中。指針非常危險,必須小心處理。
如何檢測出現問題的位置? 那麼,當您的程序收到SEGFAULT
時,Linux並不是非常豐富,但是它提供了大量信息。你只需要知道如何「閱讀」它。
coredump,是在出現分段錯誤時的內存,堆棧和變量的圖片。運行它
gdb myapp core
其中myapp是您的應用程序可執行文件,而core是coredump。 現在你會看到類似這樣的:
GNU gdb 19991004
Copyright 1998 Free Software ���.�
Core was generated by `testit'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /usr/lib/libstdc++-libc6.1-1.so.2...done.
Reading symbols from /lib/libm.so.6...done.
Reading symbols from /lib/libc.so.6...done.
Reading symbols from /lib/ld-linux.so.2...done.
#0 0x823221a in main() at blabla.c:3
10 *i++;
它會準確地告訴你哪一行引起的故障。 如果您想確切知道如何到達該行,請鍵入bt
這將向您顯示從應用程序main()直到實際故障(包括傳遞給函數的參數)的回溯。
我認爲,一旦你確切地知道分段錯誤發生的位置,你將更容易解決它。
幾點注意事項:
如果不創建轉儲。在控制檯 類型的:
ulimit -c unlimited
你需要使用-g編譯程序,以使在gdb的符號有意義的名稱。
相關問題
- 1. 從標準輸入讀取的分段錯誤(核心轉儲)
- 2. 段錯誤 - 核心轉儲
- 3. Genymotion:分段錯誤(核心轉儲)genymotion
- 4. qt app.exec()分段錯誤核心轉儲
- 5. 分段錯誤(核心轉儲)
- 6. 分段錯誤(核心轉儲)C
- 7. 分段錯誤(轉儲核心)
- 8. quickSort分段錯誤(核心轉儲)
- 9. C - 分段錯誤(核心轉儲)
- 10. 分段錯誤(核心轉儲)
- 11. C++的核心轉儲分段錯誤
- 12. 分段錯誤(核心轉儲)
- 13. scipy.interp2d [分段錯誤(核心轉儲)]
- 14. 保持分段錯誤(核心轉儲)
- 15. 分段錯誤,沒有核心轉儲
- 16. 分段錯誤(故障核心轉儲)
- 17. 分段錯誤(核心轉儲)C++
- 18. 核心轉儲和分段錯誤
- 19. g ++:分段錯誤(核心轉儲)
- 20. 分段錯誤(核心轉儲)鏈表
- 21. 分段錯誤(核心轉儲)後果
- 22. 分段錯誤(核心轉儲)
- 23. PyQt5分段錯誤(核心轉儲)
- 24. 錯誤段錯誤(核心轉儲)
- 25. 分割錯誤(核心轉儲)錯誤
- 26. 分段錯誤(核心轉儲)從文件
- 27. 從文件讀取 - 分段錯誤(核心轉儲)
- 28. C++鏈表實現分段錯誤(核心轉儲)錯誤
- 29. 鏈接列表錯誤「分段錯誤」核心轉儲
- 30. 分段錯誤(核心轉儲)代碼顯示此錯誤
代碼會幫助很多。只是說' – 2013-04-09 19:58:02
你能縮小一點代碼嗎? – 2013-04-09 19:58:03
不需要兩個代碼路徑。只要做一些像'FILE * fp = argc> 2? fopen(argv [2]):stdin;'(請務必檢查錯誤) – 2013-04-09 19:58:24