码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-01 02:26:11      阅读:456      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   文件   for   2014   



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

#include<stdio.h>

#include<stdlib.h>

void main()

{

    int a[1024 * 1024];

    int num = 100;

    system("pause");

}

错误截图:

bubuko.com,布布扣

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静态库)。

 

malloc,colloc,realloc内存分配,动态库,静态库的生成与调用,布布扣,bubuko.com

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

标签:style   blog   http   color   io   文件   for   2014   

原文地址:http://blog.csdn.net/tototuzuoquan/article/details/38327165

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!