Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在for循环c+中创建对象+;_C++_Arrays_Object - Fatal编程技术网

C++ 在for循环c+中创建对象+;

C++ 在for循环c+中创建对象+;,c++,arrays,object,C++,Arrays,Object,我有这个: void Queue::testMethod(){ this->theQueue.clear(); for (int i = 0; i < 3 ; i ++ ){ char *uu = new char[3]; uu[0] = 'd'; uu[1] = static_cast<char>(i); uu[2] = 'r'; MyClass tt(uu, 7); this->theQueue.push_back

我有这个:

void Queue::testMethod(){
this->theQueue.clear();
for (int i = 0; i < 3 ; i ++ ){
    char *uu = new char[3];
    uu[0] = 'd';
    uu[1] = static_cast<char>(i);
    uu[2] = 'r';
    MyClass tt(uu, 7);
    this->theQueue.push_back(tt);

}

}

string Queue::PrintData(){
string data;
for ( int i = 0 ; i < this->theQueue.size(); i ++){
    data += this->theQueue.at(i).PrintData();
}

return data;
}
我主要做以下几点:

MyClass myClass1((char *)"1111", 3);
MyClass myClass2((char *)"1111", 3);
MyClass myClass3((char *)"2222", 3);

vector<MyClass> tmpVector;
tmpVector.push_back(myClass1);
tmpVector.push_back(myClass2);
tmpVector.push_back(myClass3);

Queue tmpQueue(tmpVector);

tmpQueue.testMethod();
cout << tmpQueue.PrintData() << endl;

你有未定义的行为。在构造函数
MyClass::MyClass(char*am,int number)
中,通过

int i = strlen(am);
C样式字符串以null结尾。因此,这将在
am
中查找
\0
。这适用于字符串文本,如

MyClass myClass1((char *)"1111", 3);
因为它们自动包含终止的
\0
。在
Queue::testMethod()
中,第一个迭代也可以工作,因为第二个字符

uu[1] = static_cast<char>(i);
uu[1]=static_cast(i);
是空字符(因为此时
i
0
strlen
在索引1处查找此空字符,因此返回长度1,因此仅打印
r
get。对于任何
i>0
缓冲区
uu
不包含终止空字符,因此
strlen
读取数组边界之外的内容,这是未定义的行为。

int i=strlen(am)要求am是以nul结尾的字符串,但它不是。
MyClass myClass1((char *)"1111", 3);
uu[1] = static_cast<char>(i);