c/c++语言开发共享在一个结构中的数组并填充他

目前我有一个研究项目,我和一个朋友真的不知道如何解决问题的一部分。

所以,这是一个C项目。 我有2个结构:

struct Lib { char letter; int capacity; int size; char** words[200000]; }; typedef struct Lib Library; struct Program { char* loadedFileName[50]; FILE* f; Library* dictionary; int totalwords; }; typedef struct Program Program; 

而这个function:

 void fillDicoFromFile(Program* startup){ rewind(startup->f); while(!feof(startup->f) && !ferror(startup->f)){ char* word = malloc(sizeof(char) * 30); fscanf(startup->f, "%s", word); int indexLib = word[0] - 97; int sizeLib = startup->dictionary[indexLib].size; startup->dictionary[indexLib].words[sizeLib] = (char*)malloc(sizeof(char) * (strlen(word)+1)); startup->dictionary[indexLib].words[sizeLib] = word; startup->dictionary[indexLib].size++; free(word); } CountTotalWords(startup); } 

startup-> dictionary是一个26库的数组,当我从文件中得到一个单词时,我检查他的第一个字母并选择好的库(startup-> dictionary [0] for’a’…)然后把结构的数组“单词”上的单词,但是当我想要printf一些单词时,它就会出现错误或错误。 我很确定我们在指针上做错了但是……

我们做错了什么?

    这个:

      startup->dictionary[indexLib].words[sizeLib] = (char*)malloc(sizeof(char) * (strlen(word)+1)); startup->dictionary[indexLib].words[sizeLib] = word; 

    ……不会做你认为它做的事。 你正在分配空间(使用malloc ,第一行),但你没有使用它; 相反,您正在存储指向先前在word分配的空间的指针(第二行)。 要清楚,语句startup->dictionary[indexLib].words[sizeLib] = word不会复制字符串; 它只是指定一个指针。

    然后,你释放那个空间:

      free(word); 

    字典现在包含一个悬空指针 – 指向不再分配的区域的指针。 修复很简单:

      以上就是c/c++开发分享在一个结构中的数组并填充他相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519261.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐