malloc函数需要注意的地方(数据结构)

malloc函数

简介:

void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。

       如果分配成功:则返回指向被分配内存空间的指针

       不然,返回空指针NULL。

       同时,当内存不再使用的时候,应使用free()函数将内存块释放掉。

       关于:void *,表示未确定类型的指针。C,C++规定,void *类型可以强转为任何其他类型的的指针。

关于分配失败的原因,应该有多种,比如说空间不足就是一种。

需要注意的地方:

A、申请了内存空间后,必须检查是否分配成功。

B、当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向NULL,防止程序后面不小心使用了它。

C、这两个函数应该是配对。如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。

D、虽然malloc()函数的类型是(void *),任何类型的指针都可以转换成(void *),但是最好还是在前面进行强制类型转换,因为这样可以躲过一些编译器的检查。

示例1:

扫描二维码关注公众号,回复: 9884518 查看本文章
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
    int *p = NULL;
    p = (int *)malloc(sizeof(int));
    printf("%p\n", p);
    free(p);
    return 0;
}

示例2:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode * List;
struct LNode {
    int data;
    struct LNode* next;
};
int main(int argc, char const *argv[])
{
    struct LNode *head = NULL;
    head = (List)malloc(sizeof(struct LNode));
    head->data = 1;
    head->next = NULL;
    printf("%d\n", head->data);
    return 0;
}

示例3:

#include <stdio.h>
#include <stdlib.h>
typedef struct LNode * List;
typedef struct LNode {
    int data;
    struct LNode* next;
}Node;
int main(int argc, char const *argv[])
{
    Node *head = NULL;
    head = (List)malloc(sizeof(Node));
    head->data = 1;
    head->next = NULL;
    printf("%d\n", head->data);
    return 0;
}

示例4:

#include <stdio.h>
#include <stdlib.h>
typedef int * q;
int main(int argc, char const *argv[])
{
    int *p = NULL;
    p = (q)malloc(sizeof(int));
    printf("%p\n", p);
    return 0;
}
发布了67 篇原创文章 · 获赞 22 · 访问量 7164

猜你喜欢

转载自blog.csdn.net/weixin_43906799/article/details/104710040