fifo — передача внешней переменной в класс переполнения стека

Я поместил здесь упрощенную версию своего кода. Я пытаюсь прочитать каждую строку входного файла и сохранить ее в классе fifo. Однако перед каждым магазином я пытаюсь распечатать предыдущее значение fifo (это было для отладки). Я вижу, что предыдущее значение перезаписывается еще до того, как я вызываю функцию fifo.add. Сама функция getline перезаписывает fifo самостоятельно. Может кто-нибудь, пожалуйста, скажите мне, что здесь происходит?

//fifo.h

#ifndef FIFO_H_
#define FIFO_H_

class fifo {
private:
char* instr_arr;
int head;
int tail;
public:
fifo();
fifo(int,int);
void add(char*);
void print_instruction(void);
};

#endif

//fifo.cpp

#include "fifo.h"#include <iostream>
//using namespace std;

fifo::fifo() {
head = 0;
tail = 0;
instr_arr = "NULL";
}

fifo::fifo(int h, int t) {
head = h;
tail = t;
}

void fifo::add (char *instr) {
instr_arr = instr;
}

void fifo::print_instruction (void) {
std::cout << instr_arr << std::endl;
}

//code.cpp

#include <iostream>
using namespace std;
#include <fstream>
using namespace std;
#include "fifo.h"
#define MAX_CHARS_INLINE 250

int main (int argc, char *argv[]) {
char buf[MAX_CHARS_INLINE];     //Character buffer for storing line
fifo instruction_fifo;          //FIFO which stores 5 most recent instructions

const char *filename = argv[1];
ifstream fin;
fin.open(filename);

while(!fin.eof()) {
std::cout << buf << std::endl;
fin.getline(buf, MAX_CHARS_INLINE);
instruction_fifo.print_instruction();  //This instruction prints the line which was read from getline above!! Why??
instruction_fifo.add(buf);
}
return 0;
}

0

Решение

Вы на самом деле не храните данные в FIFO (или в блоке памяти, управляемом FIFO), только указатель (который указывает на buf).

Когда вы печатаете instr_arrВы в основном печатаете buf, так как instr_arr указывает на buf,

1

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

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

По вопросам рекламы [email protected]