gpt4 book ai didi

c++ - 在此函数中使用未初始化 [-Wuninitialized]

转载 作者:行者123 更新时间:2023-11-28 04:17:30 25 4
gpt4 key购买 nike

我在 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()

我试过在 main 中将它们声明为 BlocoMemoria*ram=new BlocoMemoria[];但编译器不太喜欢那样。

我需要这个修复的原因是因为在主程序执行中没有进行任何操作。

它确实在没有 -Wall 的情况下编译

这样做了几个小时,我有点绝望,不知道我是否提供了必要的信息,如果您需要任何东西,请告诉我,我会编辑这个,谢谢。

最佳答案

这一行是问题所在:

BlocoMemoria *ram = gerarBM(ram, tamanhoRam);

您在定义它的同一语句的右侧使用了 ram

相反,您可以像这样更改 gerarBM:

BlocoMemoria* gerarBM(int q){
return new BlocoMemoria[q];
}

并这样调用它:

BlocoMemoria* ram = gerarBM(tamanhoRam);

关于c++ - 在此函数中使用未初始化 [-Wuninitialized],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56285372/

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