堆释放错误

来源:互联网 发布:finale mac 汉化 编辑:程序博客网 时间:2024/05/27 06:55

1.结构体使用之前一定得分配内存;尤其是结构体嵌套的那种,一定要记得给内部的结构体分配内存;(当然得记得释放)

例如:
    MS_GMM* gmm;

 

gmm=(MS_GMM*)malloc(sizeof(MS_GMM));//需è要癮传?递蘗参?数簓的?结á构1体?,?最?好?定¨义?为a指?针?,?在ú使?用?大洙?的?结á构1体?之?前°,?最?好?先è分?配?内ú存?

gmm->src_data=(MS_IMAGE_S*)malloc(sizeof(MS_IMAGE_S));

gmm->bg_data=(MS_IMAGE_S*)malloc(sizeof(MS_IMAGE_S));

gmm->fg_data=(MS_IMAGE_S*)malloc(sizeof(MS_IMAGE_S));

gmm->roi_data=(MS_IMAGE_S*)malloc(sizeof(MS_IMAGE_S));

gmm->gmm_mem=(GMM_MEM*)malloc(sizeof(GMM_MEM));

2.释放内存:

申请几个,就需要释放几个;

谁申请,谁来释放;(dllexe要区分)

if(gmm->gmm_mem!=NULL)

{

free(gmm->gmm_mem);

gmm->gmm_mem=NULL;

}

sample_Image_Destroy(gmm->bg_data);

sample_Image_Destroy(gmm->fg_data);

sample_Image_Destroy(gmm->roi_data);

sample_Image_Destroy(gmm->src_data);

if(gmm!=NULL)

{

free(gmm);

gmm=NULL;

}

 

void sample_Image_Destroy(MS_IMAGE_S* img)

{

if(img!=NULL)

{

free(img);

img=NULL;

}

}

3.在哪儿申请就在哪儿释放

尤其得区分exedll文件,不可以在dll申请,而在exe中进行释放。

 

 

 

 

关于创建工程

1.首先理解“解决方案”,既然是解决方案就说明不是一个工程,需要创建多个工程,最好一起加载进去;

2.一个解决方案有多个工程,因此有时候需要针对某一个工程的属性进行设置,此时属于局部属性设置,在项目->属性中进行设置;有时需要在整个解决方案中进行设置,此时是属于全局属性设置,在“属性管理器”中进行设置。

3.对于静态库(lib)的加载:

静态库,是一种将程序加载在exe文件中的共享代码的方法,内存消耗大,但是设置简单,常用以下两种方法进行设置:

(1)、采用项目->属性进行设置,分别设置其包含文件(include)文件和库文件(lib);

(2)、采用代码添加方法:

包含文件:采用相对路径。(相对于当前工程的,最里边的那个项目)

库文件:#pragma comment(lib,”../test.lib”)

4.对于动态库(dll)的加载:

动态库,分为两种:编译时加载和运行时加载,也就是隐式加载和显示加载;目前我主要使用隐式加载,也就是在编译的时候加载。需要三个文件:dll文件、lib文件(函数导出库)、h文件:

(1)、采用项目->属性设置其库文件,及其连接器;然后把相应的dll文件拷贝到当前工程目录中(最里边的那个目录哈)。

0 0
原创粉丝点击