c-generic-library(多次恶意定位)

c-generic-library (mallocing several times)

提问人:David Ranieri 提问时间:4/18/2019 更新时间:4/18/2019 访问量:92

问:

浏览 c-generic-library 代码时,我发现了这一点:

#include <stdio.h>

#include "node.h"
#include "gen/access_macros.h"
#include "gen/error_macros.h"


Node *
construct_Node(size_t nlinks)
{
  Node *ptr = NULL;

  CHECK_VARA(ptr = malloc(sizeof *ptr), NULL);
  if (!(ptr->ptr = malloc(sizeof *(ptr->ptr) * nlinks))) {
    if (!(ptr->ptr = malloc(sizeof *(ptr->ptr) * nlinks))) {
      if (!(ptr->ptr = malloc(sizeof *(ptr->ptr) * nlinks))) {
        return ptr;
      }
    }
  }
  return ptr;
}

void
destruct_Node(Node * node)
{
  free(node->ptr);
  free(node);
}

重试 2 次有什么好处?我的意思是,如果它之前已经失败了两次,是否有任何机会返回真?mallocmalloc

c 马洛克

评论

2赞 Elias 4/18/2019
如果有其他线程和/或其他进程同时运行,它们也使用内存,则其中一些线程和/或其他进程可能会释放一些内存。在这种情况下,我猜以后的分配尝试之一可能会成功。
1赞 arye 11/8/2021
即使无法为 PTR->PTR 分配内存,返回 PTR 的行为看起来也很奇怪

答: 暂无答案