Ошибка при доступе к члену через несколько классов

Я новичок в C ++ и пишу простую блокчейн-программу в качестве упражнения. Когда я запускаю приведенный ниже код, я, кажется, получаю ошибку вроде:

Process returned -1073741819 (0xC0000005)

Код ниже:

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

class Block
{
int data, previous_hash;
public:
string timestamp;
Block(string a, int b, int c)
{
timestamp = a;
data = b;
previous_hash = c;
};
};

string getTime()
{
time_t now = time(NULL);
struct tm tstruct;
char buf[40];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%X", &tstruct);
return buf;  //Simple code to return current time
}

class BlockChain
{
public:
Block chain[];
BlockChain()
{
chain[0]=createGenesisBlock();
}
Block createGenesisBlock()
{
return Block(getTime(), 10, 0);
}
};

int main()
{
BlockChain myChain;
cout << "current time is " << getTime();
cout << myChain.chain[0].timestamp; //Is this correct?
}

Я включил строку в main () для доступа к строке timestamp в моем объекте mychain, Я подозреваю, что это может быть проблемой, но я не уверен, как еще я могу получить доступ к метке времени, когда она вызывается по обоим Blockchain а также Block классы.

-1

Решение

В настоящее время, BlockChain::chain массив с неизвестным размером Но когда вы получаете доступ chain[0] в BlockChainконструктор при условии, тот chain указывает на действительную память, чего нет, потому что вы никогда не инициализируете ее. Вот почему вы получаете сбой из-за плохого доступа к памяти. Я бы предложил использовать std::vector<Block> вместо Block[], который вы можете изменить размер по мере необходимости:

class BlockChain {
public:
std::vector<Block> chain;
BlockChain() {
// initialize and append a new block to chain
chain.emplace_back(createGenesisBlock());
}
1

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

Других решений пока нет …

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