1、问题描述
在调试一个程序时,在linux64位系统下出现返回较大负数随机数返回值的现象。
2、问题复现
#include <stdio.h>
#include <stdlib.h>
typedef struct _handle_s
{
unsigned char* srcbuf;
unsigned char* dstbuf;
int index;
int iWidth;
int iHeight;
}handle_s;
int mem_alloc_check_function(handle_s* h, int width, int height)
{
h->srcbuf = (unsigned char*)malloc(width*height*3/2*sizeof(unsigned char));
if (h->srcbuf==NULL)
{
return -1;
}
h->dstbuf = (unsigned char*)malloc(width*height*3/2*sizeof(unsigned char));
if (h->dstbuf==NULL)
{
return -1;
}
}
int mem_release_function(handle_s* h)
{
if (h->srcbuf !=NULL)
{
free(h->srcbuf);
}
if (h->dstbuf !=NULL)
{
free(h->dstbuf);
}
}
int main(int argc, char* argv[])
{
int ret; //测试:变量定义之后没有初始化
int i = 0;
handle_s video_handle = {0};
int width = 1280;
int height = 720;
//while(i++ < 1000)
{
ret = mem_alloc_check_function(&video_handle, width, height);
printf("[int_ret_test] ret: %d\n", ret);
mem_release_function(&video_handle);
}
return ret;
}
在windows平台下:
在Linux64位平台下:
测试发现,在windows平台下返回值都是很大的正数随机值;在linux平台下返回值会出现较大的负数随机值值或正数随机值。
3、问题修复
1、main中ret定义时立即初始化,
int ret = 0;
2、mem_alloc_check_function函数在最后添加:
return 0;
4、经验总结
(1). 变量定义时需要立即初始化,否则该变量会成为一个随机数;
例如:
int变量初始化为0;
指针变量初始化为NULL。
(2). 在需要返回值的函数中需要给出一个返回值,否则该函数可能会返回一个随机值。
(3). 在不同系统平台下,相同的程序代码可能返回不同的运行结果或现象,需要注意不同系统平台的差异。
THE END!
本博文只能阅读,谢绝转载,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 2963033731@qq.com