malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

简介:  1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void main() {     int a[1024 * 1024];     int num = 100;     system("p


1.main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示:

#include<stdio.h>

#include<stdlib.h>

void main()

{

    int a[1024 * 1024];

    int num = 100;

    system("pause");

}

错误截图:

2.在定义数组的时候要定义数组的长度,否则会出现错误。(特例:在GCC编译器下,不会出现错误(因为标准不一样))。

3.打印并且赋值的是:

for (int i = 0; i < length;i++)

{

    printf("%d\n",a[i] = i);  //初始数组并打印

}

4.内存分配可以通过三个函数实现

A.void *malloc(size_t size)malloc只管分配,不初始化内容(size:Bytes to allocate:分配的字节数)

B.void *calloc(size_t,size_t size):分配内存,并且初始化内存信息为0,其有两个参数(num:Number of elements;size:Length in bytes of each element),第一个参数是,开辟的数量,第二个参数是每个参数的大小。

C.void *realloc(void *memblock,size_t size);Reallocatememory blocks;用于分配内存.

memblock:Pointer to previously alloctedmemory block;

size:New size in bytes

例如:

int *p1 = (int*)malloc(sizeof(int)*10);//只管分配,不初始化

int *p2 = (int*)calloc(10,sizeof(int));//calloc会进行内存清零

 

例子:

#include<stdio.h>

#include <stdlib.h>

 

int main(int argc, char *argv[])

{

//只管分配

    int *p1 = (int *)malloc(sizeof(int)* 10);

    //calloc会进行内存清零

    int *p2 = (int *)calloc(10, sizeof(int));

    printf("%p,%p", p1, p2);

 

    for (int i = 0; i < 10; i++)

    {

        p1[i] = i;

        p2[i] = i;

    }

 

    getchar();

    return 0;

}

5.realloc分配内存

#include <stdio.h>

#include<stdlib.h>

 

void main()

{

    //分配内存

    int *p = (int *)calloc(10,sizeof(int));

    printf("%p\n", p);//输出地址

    int i;

    for (i = 0; i < 10;i++)

    {

        //*(p + i)等价于p[i]

        *(p + i) = i;

    }

 

    //变长,第一个参数是指针地址,第二个参数表示的是数组的个数

    int *pnew = (int *)realloc(p,100000);

    //realloc.第一种情况,后面的内存没有用,就直接扩展变长

    //第二种情况,后面的内存有人用,先分配新的长度,拷贝原来原来的内存,释放原来的内存

    printf("%p",pnew);

    for (int i = 10; i < 25000;i++)

    {

        *(pnew + i) = i;

    }

 

    system("pause");

    return 0;

}

6.新建项目dlllib

编写代码:

#include<stdio.h>

#include<stdlib.h>

 

void go()

{

    printf("Hello World\n");

}

7.制作dll,右击项目à属性à配置属性à常规à分别修改配置类型(动态库.dll)和目标文件名。

8.制作lib,右击项目à属性à配置属性à常规à分别修改配置类型(动态库.lib)和目标文件名。

9.引入lib.lib的方式有

  A:.lib拷贝到源代码所在的目录下。à通过代码引入.lib。代码是:

#pragma comment(lib,”test.lib”);  //其中test.lib就是要引入的.lib静态库(注意,也要将静态库对应的.h放到源文件所在的位置)。

  B:.lib拷贝到源代码所在的目录下。à通过配置的方式引入静态库。方式是:

    右击项目à属性à配置属性à输入à附加依赖项(如现有依赖项添加的方式添加.lib静态库)。

 

目录
相关文章
|
1天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
5天前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。
|
17天前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
71 1
|
4月前
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
57 0
|
27天前
|
安全 C++
超级好用的C++实用库之环形内存池
超级好用的C++实用库之环形内存池
39 5
|
12天前
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
一刻也没有为它哀悼~接下来登场的是动态内存分配的malloc与realloc以及free函数
46 0
|
27天前
|
C++
超级好用的C++实用库之动态内存池
超级好用的C++实用库之动态内存池
25 0
|
2月前
|
程序员 C++
malloc与free的内存管理奥秘:技术分享
【8月更文挑战第22天】在软件开发过程中,内存管理是一个至关重要的环节。特别是在使用C或C++这类语言时,程序员需要手动管理内存的分配与释放。malloc和free函数是这一过程中的核心工具。本文将深入探讨malloc如何分配内存,以及free如何知道释放多少内存,帮助你在工作学习中更好地掌握这一技术干货。
82 4
|
2月前
|
存储 算法 安全
实现一个malloc内存分配器
需要注意的是,这个例子是一个非常简单的实现,它只是为了演示原理,对于一个强壮的、用于生产环境的内存分配器来说还远远不够。一个成熟的分配器将考虑到多线程的同步、更复杂的内存分配算法、碎片整理策略、错误处理,以及安全性问题,比如防止缓冲区溢出。在实际应用程序中,你应该使用标准库提供的或操作系统提供的内存分配器,除非你确实需要并且能够处理自己实现内存分配器所带来的复杂性。
40 3
|
3月前
|
存储 编译器 程序员
【C/C++】动态内存管理(C:malloc,realloc,calloc,free)
探索C++与C语言的动态内存管理:从malloc到new/delete,了解内存分布及栈、堆的区别。文章涵盖malloc、realloc、calloc与free在C中的使用,强调内存泄漏的风险。C++引入new和delete,支持对象构造与析构,还包括operator new和placement-new。深入分析内存管理机制,揭示C与C++在内存处理上的异同。别忘了,正确释放内存至关重要!