[英]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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.