c++注意点

2020-06-03 15:44:32 浏览数 (1)

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

0 人点赞