C projet 在 Linux 上也可以工作,但在 Windows 上不工作
Posted
技术标签:
【中文标题】C projet 在 Linux 上也可以工作,但在 Windows 上不工作【英文标题】:C projet work as well in Linux but not working on Windows 【发布时间】:2022-01-23 21:29:21 【问题描述】:我在 Linux 上构建了一个 C 项目,当我尝试在 Windows 上执行它时,它不起作用。你能帮我找到解决方案吗?Error message in my Machine
当我尝试调试时,我在这里发现了一个问题,它卡在了这个 while 循环中
我们主要调用函数init_dicContexte()
#include <stdlib.h>
#include <string.h>
#include "liste_mots.h"
#include "liste_freq.h"
#include "dict_contexte.h"
int main(void)
char* texte;
FILE* fichier;
if ((fichier = fopen("Jane_Austen_Emma2.txt", "r"))==NULL)
raler("fopen");
if(fseek( fichier , 0L , SEEK_END))
raler("fseek");
long taille_fichier = ftell(fichier);
rewind(fichier);
texte = calloc(1, taille_fichier+1);
if (texte == NULL)
fclose(fichier);
raler("calloc");
if(fread(texte, taille_fichier, 1, fichier)!=1)
fclose(fichier);
free(texte);
raler("fread");
dictContexte mon_dict = init_dictContexte(texte);
afficher_dict(mon_dict);
genererTexte(mon_dict, 15);
free(texte);
return 0;
init_dictContext() 就是这样
dictContexte init_dictContexte(char* t)
int i = 0;
listeFreq liste_freq = frequencesDe(t);
_listeFreq freq_cour = liste_freq.liste;
// allocation de l'espace mémoire
dictContexte nouv_dict = malloc(sizeof(struct a_dictContexte));
dictContexte contexte_cour = nouv_dict;
printf("Creation du dictionnaire de contexte..\n");
while (freq_cour->freq_suivante!=NULL && k <2)
i++;
contexte_cour->contexte = contexte(t, freq_cour->mot);
strcpy(contexte_cour->mot, freq_cour->mot);
dictContexte nouv_contexte = malloc(sizeof(struct a_dictContexte));
strcpy(nouv_contexte->mot, "\0");
contexte_cour->suivant = nouv_contexte;
// ajout d'un contexte
contexte_cour = nouv_contexte;
freq_cour = freq_cour->freq_suivante;
nouv_dict->taille = i;
detruit_liste_freq(liste_freq.liste);
return nouv_dict;
【问题讨论】:
帮助我们帮助您 - 请将您的代码分享为格式化文本,而不是屏幕截图 请不要显示文字图片。显示文本本身(包括错误消息)。 当您寻求帮助时,请不要发布屏幕截图或照片。将文本直接剪切并粘贴到消息中。为什么? 1.人们更容易阅读。 2.它允许阅读它的人剪切和粘贴文本,从而更容易解决您的问题。 3. 使其可搜索,以便将来有人在谷歌搜索信息时可以找到此线程。 4. 屏幕阅读器无法阅读图片,这限制了我们社区中某些人的访问。 【参考方案1】:错误:pointer being free'd was not allocated
是堆损坏的示例。
堆损坏错误是臭名昭著的,因为程序似乎可以工作,然后在给定不同的输入或移动到不同的系统时突然崩溃。
如果您的朋友使用地址清理程序 (gcc -fsanitize=address ...
) 在 Linux 上构建程序,他会发现 Linux 上也存在该错误。
要告诉您真正的错误在哪里,我们需要MCVE。
但您可以自己动手:在调试器下运行可执行文件,在malloc_error_break
上设置断点(如错误消息告诉您的那样),使用where
命令,您将准确找出检测到错误的位置。
附:看起来free()
的指针尚未初始化(即包含“随机”垃圾)。
【讨论】:
【参考方案2】:您似乎正在尝试创建一个链接列表。通常,列表中最后一个节点的“下一个”成员应设置为NULL
,这样您就可以知道列表的结束位置。我看不出你在这样做。
有时可能会发生malloc
返回的内存被初始化为零的情况。发生这种情况时,“下一个”成员将具有值NULL
,并且程序将具有工作的外观。但这纯粹是偶然的,你不能依赖它。
【讨论】:
以上是关于C projet 在 Linux 上也可以工作,但在 Windows 上不工作的主要内容,如果未能解决你的问题,请参考以下文章
javax.el.PropertyNotFoundException:itemLabel="#projet.nomProjet":在 java.lang.String 类型上找不到