devm_kzalloc分配的內存會在驅動卸載時自動釋放


在gpio-button-hotplug.c里面,有這樣的代碼:

buttons = devm_kzalloc(dev, pdata->nbuttons * sizeof(struct gpio_keys_button),
	       GFP_KERNEL);
if (!buttons) {
	dev_err(dev, "no memory for button data\n");
	return -ENOMEM;
}
memcpy(buttons, pdata->buttons, pdata->nbuttons * sizeof(struct gpio_keys_button));

bdev = devm_kzalloc(dev, sizeof(struct gpio_keys_button_dev) +
	       pdata->nbuttons * sizeof(struct gpio_keys_button_data),
	       GFP_KERNEL);
if (!bdev) {
	dev_err(dev, "no memory for private data\n");
	return -ENOMEM;
}

如果bdev內存申請失敗,函數直接返回,buttons指針指向的內存空間會內存泄露嗎?答案是不會。

因為這里buttons是用devm_kzalloc申請的,這個接口申請的內存會在驅動卸載的時候自動釋放。這個函數是gpio_keys_button_probe,如果返回了失敗,則驅動會被卸載掉,buttons指向的空間也就會被釋放掉。所以這里的邏輯不會造成內存泄漏。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM