C语言 如何为 char* 释放内存



我正在编写文本 rpg 游戏,我想在最后释放内存,问题是它的一个字符*正确释放,而另一个字符* 我得到游戏.exe触发了断点错误,但我找不到这些情况有何不同。

skills *_skills;
_skills = (skills*)malloc(moj_konfig.skill_n * sizeof(skills));
for (int i = 0; i < moj_konfig.skill_n; i++)
{
    _skills[i].name = malloc(moj_konfig.ile_znakow * sizeof(char));
}
items **_it;
_it = (items**)malloc(moj_konfig.ekwipunek_wiersze * sizeof(items *));
if (_it == NULL) exit(1);
for (int i = 0; i < moj_konfig.ekwipunek_wiersze; i++)
{
    _it[i] = malloc(moj_konfig.ekwipunek_kolumny * sizeof(items));
    for (int j = 0; j < moj_konfig.ekwipunek_kolumny; j++)
    {
        _it[i][j].nazwa = malloc(moj_konfig.ile_znakow * sizeof(char));
    }
    if (_it[i] == NULL) exit(1);
}
quests *_quests;
_quests = (quests*)malloc(moj_konfig.ilosc_q * sizeof(quests));
for (int i = 0; i < moj_konfig.ilosc_q; i++)
{
    _quests[i].name = malloc(moj_konfig.ile_znakow * sizeof(char));
    _quests[i].done = 0;
    _quests[i].taken = 0;
}

它在末尾返回结构类型的函数中

ret->it = _it;
ret->skill = _skills;
ret->quest = _quests;
return ret;

释放看起来像这样:

for (int i = 0; i < moj_konfig.max_hero; i++)
{
    for (int j = 0; j < moj_konfig.ekwipunek_wiersze; j++)
    {
        for (int z = 0; z < moj_konfig.ekwipunek_kolumny; z++)
        {
            free(heroes[i].it[j][z].nazwa);
        }
        free(heroes[i].it[j]);
    }
    free(heroes[i].it);
    for (int j = 0; j < moj_konfig.ilosc_q; j++)
    {
        free(heroes[i].quest[j].name);
    }
    free(heroes[i].quest);
    for (int j = 0; j < moj_konfig.skill_n; j++)
    {
        free(heroes[i].skill[j].name);
    }
    free(heroes[i].skill);
    free(heroes[i].name);
    free(heroes);
}

只有当我释放技能名称和任务名称时,我才会出错,但在释放物品名称时不会出错。(是项目(

编辑::我更改了一些东西,它仍然不适用于Visual Studio,但是当我在代码块中尝试它时,它工作得很好,所以也许,只是也许它是某种与问题

英雄不会出现在您的

代码中,但free(heroes);必须在循环中替换为free(heroes[i]);

循环后可能free(heroes);必须完成,但前提是它是您分配的指针

相关内容

  • 没有找到相关文章

最新更新