2017-07-02 126 views
-1

這裏有人問了關於||運營商的問題。他想知道爲什麼(j=3) || (i=3)沒有把3分配給我。那個帖子是在這裏:Determining the print of C這段代碼是否導致內存泄漏?

在我的第一個問題的答案我給這個例子對於如何「功能」可用於:

ptr = malloc(sizeof(*ptr)) || printf("Error\n"); 

是的,我知道它應該被打印到標準錯誤,但這不是話題。如果我記得正確,我被告知這個構造可能導致內存泄漏。我覺得很難相信,所以請向我解釋。

是否有任何特殊原因不使用此構造?除了顯而易見的「因爲我能」的印象呢?

+7

不要使用它,因爲它是一個dilettante的代碼。 –

回答

4

如果malloc失敗,您不會意識到它;相反,您會將來自printf(打印的字符數)的返回值視爲內存地址,導致未定義的行爲。

這比內存泄漏更糟糕。

把分配加上括號將解決此問題,總是分配給ptrmalloc結果:

(ptr = malloc(sizeof(*ptr))) || printf("Error\n"); 

但是,你仍然需要確保如果分配失敗,以避免使用指針,所以它不會爲你節省很多代碼。

+0

啊,現在我明白了。所以這就是爲什麼他把這些額外的括號放在左邊的操作數上? – klutt

+0

是;在作業周圍放置括號可以解決這個問題。 – SLaks

相關問題