当我调用realloc()时,我的问题就在于行,但是与第一个“Elemento”一起工作 #包括 #包括 使用namespace std;
typedef struct{
string palabra;
string* significados;
size_t tam;
} Elemento;
typedef struct{
Elemento* elementos;
size_t tam;
} Diccionario;
Diccionario crearDic(){
Diccionario dic;
dic.tam = 0;
return dic;
}
void agregarPalabraDic(Diccionario &dic, string pal, string sig){
dic.elementos = (Elemento*)realloc(dic.elementos,(dic.tam+1)*sizeof(Elemento));
dic.tam++;
dic.elementos[dic.tam-1].palabra = pal;
dic.elementos[dic.tam-1].significados = (string*)malloc(sizeof(string));
dic.elementos[dic.tam-1].tam = 1;
dic.elementos[dic.tam-1].significados[0] = sig;
}
这是main():
int main(){
Diccionario dic = crearDic();
agregarPalabraDic(dic,"apple","red"); //no problem here
agregarPalabraDic(dic,"banana","yellow"); //thats the problem
...
}
我有几天没有尝试,我需要一些帮助.. ty
答案 0 :(得分:0)
您的问题的根源是手动内存管理。因为这是C ++,所以你真的不需要做所有这些。最好的解决方案是替换:
typedef struct
{
std::string palabra;
std::string* significados;
size_t tam;
} Elemento;
typedef struct
{
Elemento* elementos;
size_t tam;
} Diccionario;
使用:
typedef struct
{
std::string palabra;
std::vector<string>significados;
size_t tam;
} Elemento;
typedef struct
{
std::vector<Elemento> elementos;
size_t tam;
} Diccionario;
一旦你这样做,你的程序应该更容易,更不容易出错。
答案 1 :(得分:0)
在此代码中
Diccionario crearDic(){
Diccionario dic;
dic.tam = 0;
return dic;
}
为什么要返回在堆栈上创建的dic。你应该在堆上创建它然后返回。
否则当对象超出范围时,对象将被销毁。