函数参数为字符串类型时,默认值设为NULL会报错

一、bug描述

点击查看代码
cv::Mat undistort_image_halcon_cv2(cv::Mat& src, std::string calib_param_file = NULL);
在这里将字符串参数默认值设为NULL,调用这个函数时会报错,发生异常: W32/0xC0000005 Unhandled exception at 0x00007FFF5B86136A (lib_thread_measurement.dll) in test_pixelCalibrate.exe: 0xC0000005: Access violation reading location 0x0000000000000000.

二、原因分析

原因时类型不匹配,使用NULL(本质是#define NULL 0)时,编译器会尝试使用空指针初始化std::string对象
然而std::string类型的构造函数在接收const char *类型时,要求指针必须指向C风格字符串(包括空字符'\0',但NULL指针不指向任何有效的字符串内存,当使用std::String的构造函数访问时,自然会出发内存访问异常

三、解决方法

将默认值设成空字符""

posted @ 2025-07-28 15:23  十里八乡有名的俏佳人  阅读(15)  评论(0)    收藏  举报