其他结构中的数组结构的realloc

时间:2013-04-01 05:59:11

标签: c arrays pointers struct realloc

当我调用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

2 个答案:

答案 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。你应该在堆上创建它然后返回。

否则当对象超出范围时,对象将被销毁。