我是C新手,因此請在這個問題中糾正任何問題,而且我的問題也可能太模糊了。我有這樣的代碼,我得到了分段錯誤。我在網上讀了段故障通常發生當u訪問指向什麼C中的指針和分段錯誤?
struct apple get(char* name) {
struct apple a;
a.name = name;
return a;
}
struct apple* read(){
struct apple* ap = (struct apple*)malloc(2*sizeof(struct apple));
ap[0] = get("bob");
return ap;
}
// loop through in another function which reads a pointer to an
// apple object in the array and then accesses apple->name
當Apple蘋果訪問的指針>名字裏有一個分段錯誤。我假設這是因爲蘋果對象被聲明爲局部變量,並在稍後由c釋放?我真的不知道爲什麼我會遇到分段錯誤或者如何解決這個問題,或者c如何將釋放結構初始化爲函數中的局部變量。有人能告訴我發生了什麼事,謝謝!
你究竟在哪裏得到錯誤?在示例代碼中沒有行說明apple-> name。 – 2012-01-15 15:49:12
我想你需要提供更多的上下文 - 蘋果如何定義,以及你如何使用這些功能?無論如何,[valgrind](http://valgrind.org)可以幫助您找到像這樣的內存問題的來源。 – James 2012-01-15 15:50:41
將代碼告訴我們「這類事情就像這樣」並沒有什麼幫助。您向我們展示的代碼中沒有任何內容會導致分段錯誤。向我們展示一個展示問題的小型完整程序。 'get()'通過值*返回一個struct *,所以這裏沒有問題。 'read()'返回一個指向堆分配內存的指針;該指針在你明確釋放()之前一直有效。 – 2012-01-15 16:06:05