时间:2021-07-01 10:21:17 帮助过:28人阅读
执行完拷贝时,此时a1.data_已经被a2.data_所覆盖,a1实例化时申请的int数组已经没有指针指向它(第五行代码)。程序退出时。这部分内存溢出。
解决方案,目前还没有决定用哪个:
1.重写类,使用拷贝构造函数,弃用memcpy。
优点,就应该这么办,缺点,工程量有点大,老代码,没有敢动。
2.MakeFile中添加[-Wclass-memaccess]将警告屏蔽。
优点,修改的时间快。
缺点,不讲武德,欺骗客户。
3.强制类型转换
memcpy ( &upoData[i] , &pData , sizeof ( UData ) ) ;---->memcpy ( (void*)&upoData[i] , (void*)&pData , sizeof ( UData ) ) ;
优点,修改的时间快。相比第二种看着舒服点。
缺点,也不太讲武德,有点欺骗客户和编译器感情。
目前调查出三种修改方案。具体采用哪种定下来再补充。
参考链接:
c++ - What uses are there for "placement new"? - Stack Overflow
c++ - Using std::memcpy to object of non-trivially copyable type - Stack Overflow
c++ - Avoid `-Wclass-memaccess` on memcpy of a POD type w/copy disabled - Stack Overflow
消除警告 writing to an object of type ‘class XXOO’ with no trivial copy-assignment; use copy-assignment or copy-initialization instead [-Wclass-memaccess]
标签:版本 span nes code ase cstring rgba with 指针