0

当我调用 realloc() 时,我的问题就在这条线上,但适用于第一个“Elemento”#include #include using 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

4

2 回答 2

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;

一旦你这样做了,你的程序应该会更容易,更不容易出错。

于 2013-04-01T06:03:05.900 回答
0

在这段代码中

Diccionario crearDic(){
   Diccionario dic;
   dic.tam = 0;
   return dic;
}

你为什么要返回在堆栈上创建的 dic。您应该在堆上创建它然后返回。

否则该对象将在超出范围时被销毁。

于 2013-04-01T06:15:33.200 回答