Я делаю симуляцию кеша памяти на C ++, и после большого количества кодирования я получаю эту ошибку:
g++ main.cpp blocoMemoria.cpp endereco.cpp instrucao.cpp mmu.cpp maquina.cpp -o joubert.o -g -Wall
main.cpp: In function ‘int main(int, const char**)’:
main.cpp:18:29: warning: ‘ram’ is used uninitialized in this function [-Wuninitialized]
BlocoMemoria *ram = gerarBM(ram, tamanhoRam);
~~~~~~~^~~~~~~~~~~~~~~~~
main.cpp:19:32: warning: ‘cache1’ is used uninitialized in this function [-Wuninitialized]
BlocoMemoria *cache1 = gerarBM(cache1, tamanhoCache1);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
main.cpp:20:32: warning: ‘cache2’ is used uninitialized in this function [-Wuninitialized]
BlocoMemoria *cache2 = gerarBM(cache2, tamanhoCache2);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
main.cpp:26:66: warning: ‘memoriaInstrucoes’ is used uninitialized in this function [-Wuninitialized]
Instrucao *memoriaInstrucoes = montarInstrucoesProgramaAleatorio(memoriaInstrucoes, tamanhoPrograma, qdePalavrasBloco, tamanhoRam);
Это моя главная:
#include <iostream>
#include <bits/stdc++.h>
#include "endereco.hpp"
#include "instrucao.hpp"
#include "blocoMemoria.hpp"
#include "mmu.hpp"
#include "maquina.hpp"
using namespace std;
int main(int argc, char const *argv[]){
int tamanhoRam= 1000;
int tamanhoCache1 = 8;
int tamanhoCache2 = 16;
int tamanhoPrograma = 1000;
int qdePalavrasBloco = 4;
BlocoMemoria *ram = gerarBM(ram, tamanhoRam);
BlocoMemoria *cache1 = gerarBM(cache1, tamanhoCache1);
BlocoMemoria *cache2 = gerarBM(cache2, tamanhoCache2);
montarRam(ram, tamanhoRam, qdePalavrasBloco);
montarCacheVazia(tamanhoCache1, cache1);
montarCacheVazia(tamanhoCache2, cache2);
Instrucao *memoriaInstrucoes = montarInstrucoesProgramaAleatorio(memoriaInstrucoes, tamanhoPrograma, qdePalavrasBloco, tamanhoRam);
maquina(memoriaInstrucoes, ram, cache1, cache2);
deleteBM(cache2);
deleteBM(cache1);
deleteBM(ram);
deleteInst(memoriaInstrucoes);
cout<<"terminou\n";
return 0;
}
Это мой blocoMemoria.cpp:
#include "blocoMemoria.hpp"
using namespace std;
struct blocoMemoria{
int *palavras = new int[4];
int endBloco = -1;
bool atualizado = false;
int custo = 0;
int cacheHit = 0;
};
BlocoMemoria* gerarBM(BlocoMemoria* b, int q){
b=new BlocoMemoria[q];
return b;
}
BlocoMemoria *posToPoint(BlocoMemoria *z, int k){
BlocoMemoria *aux=&z[k];
return aux;
}
void deleteBM(BlocoMemoria *a){
delete a;
}
void juntarBM(BlocoMemoria *a, BlocoMemoria *b, int i){
if(i==1){
setPalavras(a, getPalavras(b));
setEndBloco(a, getEndBloco(b));
setAtualizado(a, isAtualizado(b));
setCusto(a, getCusto(b));
setCacheHit(a, getCacheHit(b));
}
else{
setPalavras(&a[i], getPalavras(b));
setEndBloco(&a[i], getEndBloco(b));
setAtualizado(&a[i], isAtualizado(b));
setCusto(&a[i], getCusto(b));
setCacheHit(&a[i], getCacheHit(b));
}
}
int getCusto(BlocoMemoria *c) {
return c->custo;
}
void setCusto(BlocoMemoria *c, int custo) {
c->custo = custo;
}
int* getPalavras(BlocoMemoria *c) {
return c->palavras;
}
int* getPalavras(BlocoMemoria *c, int i) {
return c[i].palavras;
}
void setPalavras(BlocoMemoria* c,int *palavras) {
c->palavras = palavras;
}
int getEndBloco(BlocoMemoria *c) {
return c->endBloco;
}
void setEndBloco(BlocoMemoria *c, int endBloco) {
c->endBloco = endBloco;
}
bool isAtualizado(BlocoMemoria *c) {
return c->atualizado;
}
void setAtualizado(BlocoMemoria *c) {
c->atualizado = !c->atualizado;
}
void setAtualizado(BlocoMemoria *c, bool d) {
c->atualizado = d;
}
int getCacheHit(BlocoMemoria *c) {
return c->cacheHit;
}
void setCacheHit(BlocoMemoria *c, int cacheHit) {
c->cacheHit = cacheHit;
}
Я немного новичок, поэтому я понятия не имею, почему это происходит, если я возвращаю правильный указатель на:
BlocoMemoria* gerarBM()
Я пытался просто объявить их в основном как
BlocoMemoria * ram = новая BlocoMemoria [];
но компилятору это не очень нравится.
причина, по которой мне нужно это исправить, заключается в том, что в основной программе не выполняются никакие операции.
компилируется без -Wall
делаю это часами, и я становлюсь отчаянным и не знаю, даю ли я хоть необходимую информацию, если вам что-то нужно, просто дайте мне знать и плохо отредактируйте это, спасибо.