gpt4 book ai didi

c++ - 二维对象数组内存问题 C++

转载 作者:行者123 更新时间:2023-11-28 06:56:24 25 4
gpt4 key购买 nike

当我的输入看起来像这样时:

11

哈里凯特弗雷德卡罗尔

我的邻接矩阵应该把哈利放在 [7][7],凯特放在 [7][10],弗雷德放在 [7][5],卡罗尔放在 [7][2]。然而,Carol & Kate 被插入到 adj 中的其他位置。矩阵也是如此。我猜这与堆栈和堆内存有关,但我不确定如何找到该错误。使用 cout 语句,似乎没有任何问题。

下面的代码

#include <iostream>
#include <string>
#include <stdlib.h>
#include <iostream>
#include <sstream>
using namespace std;

class Element {

public:
string name;
int weight;
string color;

//default constructor
Element(void) {
name = "";
weight = 0;
color = "white";
}

//parameterized constructor
Element(string first) {
name = first;
weight = 0;
color = "white";
}

void setBlack() {
color = "black";
}
};

class AdjMatrix {

public:
int size;
Element ***adj_matrix;
AdjMatrix(void) {
size = 0;
adj_matrix = NULL;
}

AdjMatrix(int n) {
size = n; //sets the size to n
adj_matrix = new Element **[size];
for (int i = 0; i < size; i++) {
adj_matrix[i] = new Element *[i];
}
}

//Destructor class
~AdjMatrix(void) {
delete adj_matrix;
adj_matrix = NULL;
}

//initialize the array with empty elements
void initialize_matrix() {
Element *add_element = new Element("");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++)
adj_matrix[i][j] = add_element;
}
}
};


int convertToASCII(string letter)
{
int x = letter.at(0);
int index = x - 65;
return index;
};

int main(int argc, char *argv[]) {

string table_size;
cout<<"";
getline(cin,table_size);
int size = atoi(table_size.c_str());
AdjMatrix *myGraph = new AdjMatrix(size);
myGraph->initialize_matrix();

string line;
getline(cin, line);
while (getline(cin,line))
{
if (line.empty())
break;

else {

int x = convertToASCII(line);
stringstream linestream(line);
string temp;

while (linestream >> temp) {
int z = convertToASCII(temp);
myGraph->adj_matrix[x][z] = new Element(temp);
}
}
}

//Print graph
for (int i = 0; i < myGraph->size; i++) {
for (int j = 0; j < myGraph->size; j++)
cout<<"["<<i<<"]["<<j<<"]: "<<myGraph->adj_matrix[i][j]->name<<endl;
}

return 0;
}

最佳答案

您的程序有以下问题需要更正。

 //default constructor
Element(void)

构造函数应该定义为

 //default constructor
Element()
  • 您应该开始将 std::vector 用于您的二维数组。这将消除手动内存管理。我们应该避免在现代 C++ 中使用裸指针。请引用以下 SO 帖子,其中介绍了如何将 vector 用于 2D 数组。

two dimensional array using vector in cpp

关于c++ - 二维对象数组内存问题 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23123746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com