YOA_online 2022-08-13 14:32 采纳率: 100%
浏览 59
已结题

空指针也能分配地址吗?

用malloc分配了地址的指针什么情况下会是空指针?在做链表练习题时注意到答案代码里有多处出现形如以下的地方

*L = (GoodsList*)malloc(sizeof(GoodsList));
    if (*L == NULL) {
        return;
    }

感觉是一种防出错的机制,但我很好奇空指针也可以分配地址吗?为什么不把if语句提前到分配地址的语句前呢?
提前感谢解答!这里附上整段代码


void init_list(GoodsList** L)
{
    GoodsList* p;
    int i = 0;
  //这里出现了一次
    *L = (GoodsList*)malloc(sizeof(GoodsList));
    if (*L == NULL) {
        return;
    }
    GoodsList* hpead = *L;
    GoodsInfo gi;
    FILE* fp = fopen("goodsinfo.txt", "a+");
    if (fp == NULL) {
        perror("fopen()");
        return;
    }
    while (fscanf(fp, "%s %s %d %s %d %d\n", gi.goods_id, gi.goods_name, &gi.goods_price, gi.goods_discount, &gi.goods_amount, &gi.goods_remain) != EOF) {
    //这里又出现一次
        GoodsList* cur = (GoodsList*)malloc(sizeof(GoodsList));
        if (cur == NULL) {
            continue;
        }
        cur->data = gi;
        hpead->next = cur;
        hpead = hpead->next;
        i++;
    }
    printf("目前有 %d个商品信息 ", i);
}
  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-08-13 14:47
    关注

    内存不够了就分配不到了
    空指针也可以分配地址吗?===你这个问法本身也有问题。能不能分配地址和是不是空指针无关,和内存够不够有关。你所说的空指针是说左侧的L是否为空。这里L是作为左值的,右侧malloc才是分配地址,分配到的地址值将赋予L指针,L指针原先指向的地址会被覆盖的。
    后面if的左右是判断malloc是否成功分配到空间

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月24日
  • 已采纳回答 8月16日
  • 创建了问题 8月13日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。