-
malloc分配字符串空间时,要长度+1,因为还有字符串结束符/0 eg. this->filePath = (char *)malloc(strlen(filePath) + 1);
-
字符串复制,用函数memcpy(this->filePath,filePath,strlen(filePath) + 1); , strcpy是不安全的。
-
.hpp 头文件中定义,只能做定义操作,不能new ,一些初始化操作应该放在主程序里或者构造函数里。
-
函数参数是int * frameDataLength, char ** data 时,调用时,不能直接声明int * 和 char** 传入,因为他们是野指针或者空指针,需要声明int和char *,然后传入&int &char *。
-
函数中,给函数指针参数赋值时,不能赋值指针:data=&data2。因为每次执行函数,参数变量是新建的,指针只是指向与函数外的变量相同data=&data2,只把函数内的指针指向改了,函数外的指针变量并没有改变。所以需要*data = data2,把地址里的数值修改了,函数外部也能收到变化。
-
正常情况下,return 0,异常情况,return 负数
0 表示false,非0 表示true -
往某字符串后面拷贝:
memcpy(allFrame, fileFrameArr, sizeof(ZSVideoFileFrame));
memcpy(allFrame + sizeof(ZSVideoFileFrame), data, frameDataLength); -
linux下运行抛出异常:Floating point exception(浮点数异常)
- 高版本编译的gcc库,在低级gcc下运行;
- 非法运算,如分母为0等;(首先检查该项,是否有分母为零的情况,如文件路径不正确,由于找不到图片,给出图片总数为0,但内部运算了识别率等用到该图片数作为分母的情况)
-
写完程序先检查释放资源 new malloc 是否delete free
-
写完程序最好用工具检查内存增长情况
-
如果data 声明为char * data,没有明确分配内存, 会成为一个野指针,代码会core
char * data = (char *)malloc(1000);
if(fread(data, sizeof(char), 1000, h264VideoFile)){... -
free的时候,如果char * 没赋值,也没赋NULL,会core,因为时野指针,指向的位置安全性未知
-
free标准代码
if(dataP != NULL){
free(dataP);
dataP = NULL;
} -
变量没初始化,值是那片内存原始值,一个神奇的值。没初始化,做比较大小或者其他操作,很容易出现问题。(正确地初始化变量是一种好的编程习惯,否则程序会产生意想不到的结果)
网友评论