我对如何检查内存分配是否失败以防止由取消引用的NULL指针引起的任何未定义行为感到有些困惑。我知道malloc(和类似的函数)可能会失败并返回NULL,因此在继续执行程序的其余部分之前,应始终检查返回的地址。我不明白的是处理此类案件的最佳方法是什么。换句话说:当malloc调用返回时程序应该做什么NULL?
当这个疑问出现时,我正在研究双向链表的这种实现。
struct ListNode {
struct ListNode* previous;
struct ListNode* next;
void* object;
};
struct ListNode* newListNode(void* object) {
struct ListNode* self = malloc(sizeof(*self));
if(self != NULL) {
self->next = NULL;
self->previous = NULL;
self->object = object;
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
节点的初始化仅在其指针被正确分配时发生。如果这没有发生,则此构造函数返回NULL。
我还编写了一个函数,该newListNode函数从一个已经存在的节点开始创建一个新节点(调用该函数),然后返回它。
struct ListNode* createNextNode(struct ListNode* self, void* object) {
struct ListNode* newNext = newListNode(object);
if(newNext != NULL) {
newNext->previous = self;
struct ListNode* oldNext …Run Code Online (Sandbox Code Playgroud)