用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);
}
内存不够了就分配不到了
空指针也可以分配地址吗?===你这个问法本身也有问题。能不能分配地址和是不是空指针无关,和内存够不够有关。你所说的空指针是说左侧的L是否为空。这里L是作为左值的,右侧malloc才是分配地址,分配到的地址值将赋予L指针,L指针原先指向的地址会被覆盖的。
后面if的左右是判断malloc是否成功分配到空间
分配地址跟原来指针的值有啥关系啊,等于号都忘了什么意思了?不就是把malloc函数的返回值赋值给左边的变量吗,而malloc分配失败返回NULL,所以说先分配再判断