добавить значение из файла в двойной указатель

мой .h файл

#ifndef ADJACENCYMATRIX_H_
#define ADJACENCYMATRIX_H_
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;class AdjacencyMatrix{

private:
int vertexCount;
int vertexFirst;
int edgeCount;
int **wage;
int **matrix;

public:
AdjacencyMatrix();
virtual ~AdjacencyMatrix();
bool createFromFile(string path);
void viewMatrix();};

#endif /* ADJACENCYMATRIX_H_ */

Я прочитал файл формы и хочу записать его в свою инициализированную матрицу, но он не работает. Вы можете мне помочь ?

#include "AdjacencyMatrix.h"
AdjacencyMatrix::AdjacencyMatrix() {
this->vertexCount=0;
this->vertexFirst=-1;
this->edgeCount=0;
}

AdjacencyMatrix::~AdjacencyMatrix() { }

bool AdjacencyMatrix::createFromFile(string path) {
fstream file;
file.open(path.c_str(), fstream::in);
if (file.good())
{
int vertexF,vertexE,wag;
cout << "file opened" << endl;
file >> this->edgeCount;
file >> this->vertexCount;
file >> this->vertexFirst;

matrix = new int *[edgeCount];
wage = new int *[edgeCount];

for (int i = 0; i < vertexCount; i++)
{
matrix[i]=new int[edgeCount];
wage[i]=new int[edgeCount];
}

//fill matrix by zeros
for (int i = 0; i < vertexCount; i++)
{

for(int j=0; j<edgeCount;j++)
{
matrix[i][j]=0;
wage[i][j]=0;
}
}

// fill matrix by 1
for(int i=0; i<edgeCount; i++)
{
file >> vertexF >> vertexE >> wag;
cout << " w " << wag;
matrix[vertexF][vertexE] = 1;
}

file.close();
return true;
}
cout << "File does not opened" << endl;
return false;
}

void AdjacencyMatrix::viewMatrix(){
cout << " Adjacency Matrix ";
for(int i=0; i<vertexCount; i++)
{
for(int j=0; i<edgeCount;i++) {
cout << this->matrix[i][j] << " ";
}
cout<< endl;
}
}

и эта часть не работает (я имею в виду, что ничего не отображается, и showMatrix () не работает). Я хочу получить значение из файла, а затем записать его как matrix[x][y] = 1 потому что я хочу создать путь графа.

for(int i=0; i<edgeCount; i++)
{
file >> vertexF >> vertexE >> wag; // cout work in this line
matrix[vertexF][vertexE] = 1; // does not work
}

0

Решение

Размер вашей матрицы неверен:

matrix = new int *[edgeCount]; // wrong size
wage = new int *[edgeCount];   // wrong size

for (int i = 0; i < vertexCount; i++)
{
matrix[i]=new int[edgeCount];
wage[i]=new int[edgeCount];
}

Когда вы определяете матрицу, вы должны использовать vertexCount вместо этого, вот так:

matrix = new int *[vertexCount];
wage   = new int *[vertexCount];

Это может привести к ошибкам сегментации или странному поведению.

Кроме того, когда вы читаете данные, предоставленные пользователем, вы должны проверить их:

file >> vertexF >> vertexE >> wag;
matrix[vertexF][vertexE] = 1;

Уверены ли вы vertexF а также vertexE не больше чем vertexCount - 1 а также edgeCount - 1?

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector