C++,调试断言失败
C++, Debug Assertion Failed
调试断言失败
我花了很多时间试图弄清楚为什么我在这个代码中有一个断言。
如果类中没有字符串,则效果很好。
你能解释一下吗, 为什么我有一个包含字符串的类的断言。
谢谢的马克
#include <malloc.h>
#include <string>
class CTheClassWith_string
{
private:
std::string TheName_;
};
class CTheClassWith_int
{
private:
int TheName_;
};
int main()
{
std::string theString;
int size;
CTheClassWith_int TheClassWith_int;
CTheClassWith_string TheClassWith_string;
CTheClassWith_int* pTheClassWith_int = new CTheClassWith_int;
size = _msize(pTheClassWith_int);
delete pTheClassWith_int;
CTheClassWith_string* pTheClassWith_string = new CTheClassWith_string;
size = _msize(pTheClassWith_string);
delete pTheClassWith_string;
CTheClassWith_int* pArrayTheClassWith_int = new CTheClassWith_int[2];
size = _msize(pArrayTheClassWith_int);
delete [] pArrayTheClassWith_int;
CTheClassWith_string* pArrayTheClassWith_string = new CTheClassWith_string[2];
size = _msize(pArrayTheClassWith_string); // Why I assert on this line
delete [] pArrayTheClassWith_string;
return 0;
}
从您的问题中,我知道您希望在使用 new()
或 new[]()
时确定从堆中分配的字节大小。
好吧,您不能使用_msize()
函数来实现此目的。除了它是一个遗留函数之外,使用 new
获得的指针不一定来自对 malloc()
系列函数的基础调用(_msize()
反过来依赖该函数,因此是断言)。
要确定从堆(或其他位置)分配的大小,您始终可以依赖 sizeof()
运算符:
CTheClassWith_int* pTheClassWith_int = new CTheClassWith_int;
size = sizeof(CTheClassWith_int);
delete pTheClassWith_int;
CTheClassWith_string* pTheClassWith_string = new CTheClassWith_string;
size = sizeof(CTheClassWith_string);
delete pTheClassWith_string;
CTheClassWith_int* pArrayTheClassWith_int = new CTheClassWith_int[2];
size = sizeof(CTheClassWith_int) * 2;
delete [] pArrayTheClassWith_int;
CTheClassWith_string* pArrayTheClassWith_string = new CTheClassWith_string[2];
size = sizeof(CTheClassWith_string) * 2;
delete [] pArrayTheClassWith_string;
相关文章:
- 尝试使用 std::vector<std::thread时出现静态断言失败错误>
- uint_not_usable_without_attribute在业力规则中使用数字生成器时静态断言失败
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- 断言"id < 0"在Qt ActiveX中失败
- 在 CppUnit 中测试中止断言失败
- 使用扫描的调试断言失败
- MS 本机单元测试 - 断言::线程失败不起作用
- 为什么我的Qt程序在断言失败后继续运行?
- 图片不显示,关闭时出错 --> 调试断言失败!表达式:is_block_type_valid(标头>_block_use)
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 调试断言失败 - 矢量下标超出视觉工作室的范围
- 错误:断言失败 (src.type() == CV_8UC1) 在阈值中
- Boost Beast 异步服务器失败,断言失败:(id_ != T::id) 在多个 aync 调用中
- 使用imwrite OpenCV时断言失败
- 调试断言失败的缓冲区!=nullptr
- 使用 ofstream 写入文本文件时断言失败
- OpenCV 错误:相机校准:断言在matrix_wrap.cpp失败
- 提升继续恢复断言失败
- 获取有关调试断言失败的错误:表达式:"(_Ptr_user &(_BIG_ALLOCATION_ALIGNMENT -1)) == 0" &&0
- 打破gdb中失败断言的正确方法是什么