我有以下代码(有关main.cpp中索引的错误):
#ifndef SAMPLE_HPP
# define SAMPLE_HPP
# include <iostream>
# include <string>
class Sample{
public:
Sample(void);
~Sample(void);
void tellname(void) const;
private:
std::string _name;
};
#endif
Run Code Online (Sandbox Code Playgroud)
#include <iostream>
#include "Sample.hpp"
Sample::Sample(void){
this->_name = "testname";
return;
};
Sample::~Sample(void){
return;
}
void Sample::tellname(void) const{
std::cout << "Name : " << this->_name << std::endl;
return;
}
Run Code Online (Sandbox Code Playgroud)
#include "Sample.hpp"
int main(void){
int i;
Sample *test;
test = new Sample[4];
i = 0;
while (i++ < 4) // I know : i++; shouldn't be here
test[i].tellname();
delete [] test;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我编译它,我得到以下输出:
Name : testname
Name : testname
Name : testname
Name :
Run Code Online (Sandbox Code Playgroud)
关于最后一行,它调用一个方法(void Sample::tellname(void)),但是来自一个不在表范围内的实例(test[4]不存在).
但是,它仍然会调用tellname()它调用它的实例不存在.它只是认为它的_name领域是空的.
这怎么可能?