//this is my source file, .cpp
#include <iostream>
#include <string>
#include "kingdom.h"
namespace westeros{
void display(Kingdom pKingdom[], int kingdomElement, string KingdomName){
cout << " ---------------- " << endl;
cout << " Searching for kingdom " << KingdomName << " in westeros " << endl;
for(int i=0; i<kingdomElement; i++){
if (pKingdom[i].m_name == KingdomName){
cout << " --------------------- " << endl;
cout << KingdomName << ", population " << pKingdom[i].m_population << endl;
cout << " --------------------- " << endl;
}
else{
cout << " --------------------- " << endl;
cout << KingdomName << " is not part of Westeros. " << endl;
cout << " --------------------- " << endl;
}
}
}
}
//this is my main file
#include <iostream>
#include "kingdom.h"
#include <string>
using namespace std;
using namespace westeros;
int main(void){
int count = 0;
Kingdom* pKingdoms = nullptr;
pKingdoms = new Kingdom[count];
display(pKingdoms, count, "Mordor");
display(pKingdoms, count, "The_Vale");
delete[]pKingdoms;
pKingdoms = nullptr;
return 0;
}
//this is my header file
#ifndef KINGDOM_H_
#define KINGDOM_H_
using namespace std;
namespace westeros{
class Kingdom{
public:
char m_name[32];
int m_population;
};
void display(Kingdom pKingdom[], int kingdomElement, string KingdomName);
}
#endif
现在它会打印
摩尔多不是维斯特洛的一部分 摩尔多不是维斯特洛的一部分 摩尔多不是维斯特洛的一部分 摩尔多不是维斯特洛的一部分 摩尔多不是维斯特洛的一部分
谷地不是维斯特洛的一部分, 谷地,人口234567 谷地不是维斯特洛的一部分 谷地不是维斯特洛的一部分 谷地不是维斯特洛的一部分
new Kingdom[count]
,然后将分配的内存和count
传递给display
。然后你访问元素Kingdom[count]
(因为kingdomElement
的值与count
相同),这超出了你分配的内存范围,导致未定义行为。 - 1201ProgramAlarmpKingdoms = new Kingdom[count];
这行代码中,count
此时为0,因此你创建了一个大小为0的数组。 - synchronizernew Kingdom[count];
执行默认初始化,这意味着所有这些Kingdom
元素都具有不确定的值,因为您没有构造函数(忽略count
为0的事实)。 - greatwolf