gpt4 book ai didi

c - 在其他结构中重新分配数组结构

转载 作者:行者123 更新时间:2023-11-30 17:53:14 27 4
gpt4 key购买 nike

我的问题是当我调用 realloc() 时,但适用于第一个“Elemento” #包括 #包括 使用命名空间 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

最佳答案

问题的根源是手动内存管理。由于这是 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;

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

关于c - 在其他结构中重新分配数组结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15738396/

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