vs2010常见的错误
2015-08-14 19:28
127 查看
常见的错误(pc)
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.释放内存:
申请几个,就需要释放几个;
谁申请,谁来释放;(dll和exe要区分)
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.在哪儿申请就在哪儿释放
尤其得区分exe和dll文件,不可以在dll申请,而在exe中进行释放。
关于创建工程
1.首先理解“解决方案”,既然是解决方案就说明不是一个工程,需要创建多个工程,最好一起加载进去;
2.一个解决方案有多个工程,因此有时候需要针对某一个工程的属性进行设置,此时属于局部属性设置,在项目->属性中进行设置;有时需要在整个解决方案中进行设置,此时是属于全局属性设置,在“属性管理器”中进行设置。
3.对于静态库(lib)的加载:
静态库,是一种将程序加载在exe文件中的共享代码的方法,内存消耗大,但是设置简单,常用以下两种方法进行设置:
(1)、采用项目->属性进行设置,分别设置其包含文件(include)文件和库文件(lib);
(2)、采用代码添加方法:
包含文件:采用相对路径。(相对于当前工程的,最里边的那个项目)
库文件:#pragma comment(lib,”../test.lib”)
4.对于动态库(dll)的加载:
动态库,分为两种:编译时加载和运行时加载,也就是隐式加载和显示加载;目前我主要使用隐式加载,也就是在编译的时候加载。需要三个文件:dll文件、lib文件(函数导出库)、h文件:
(1)、采用项目->属性设置其库文件,及其连接器;然后把相应的dll文件拷贝到当前工程目录中(最里边的那个目录哈)。
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.释放内存:
申请几个,就需要释放几个;
谁申请,谁来释放;(dll和exe要区分)
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.在哪儿申请就在哪儿释放
尤其得区分exe和dll文件,不可以在dll申请,而在exe中进行释放。
关于创建工程
1.首先理解“解决方案”,既然是解决方案就说明不是一个工程,需要创建多个工程,最好一起加载进去;
2.一个解决方案有多个工程,因此有时候需要针对某一个工程的属性进行设置,此时属于局部属性设置,在项目->属性中进行设置;有时需要在整个解决方案中进行设置,此时是属于全局属性设置,在“属性管理器”中进行设置。
3.对于静态库(lib)的加载:
静态库,是一种将程序加载在exe文件中的共享代码的方法,内存消耗大,但是设置简单,常用以下两种方法进行设置:
(1)、采用项目->属性进行设置,分别设置其包含文件(include)文件和库文件(lib);
(2)、采用代码添加方法:
包含文件:采用相对路径。(相对于当前工程的,最里边的那个项目)
库文件:#pragma comment(lib,”../test.lib”)
4.对于动态库(dll)的加载:
动态库,分为两种:编译时加载和运行时加载,也就是隐式加载和显示加载;目前我主要使用隐式加载,也就是在编译的时候加载。需要三个文件:dll文件、lib文件(函数导出库)、h文件:
(1)、采用项目->属性设置其库文件,及其连接器;然后把相应的dll文件拷贝到当前工程目录中(最里边的那个目录哈)。
相关文章推荐
- php最简单的注入与最简单的避免方式
- 算法题:A除以B
- Derivation of User Browsing Model
- JS的覆盖特性来解决文件冲突问题,css的加载问题
- swift--闭包
- win共享文件给xp系统
- C# DataGridView显示行号方法。
- hdu 4585 Shaolin(STL map)
- Codeforces 432C Prime Swaps
- hdu 1087 Super Jumping! Jumping! Jumping! 最长上升子序列的变形
- poj 2229 完全背包变形(求解整数拆分问题)
- 常用的dos命名
- poj 2135 Farm Tour【 最小费用最大流 】
- 【OpenCV】高斯混合背景建模
- html 动态显示元素文本
- Android 自己的自动化测试(5)<robotium>
- 小白书之栈的调用过程
- 安卓百度地图附近poi搜索以及到指定poi的换乘方案
- 28335硬件教程-中断系统
- 10.PHP 教程_PHP If...Else 语句