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 上不工作的主要内容,如果未能解决你的问题,请参考以下文章

在路由器vue中传递参数

Https 重定向工作错误

使用单片机和FFT算法显示波形(高分!!!急救!!)

vim介绍

javax.el.PropertyNotFoundException:itemLabel="#projet.nomProjet":在 java.lang.String 类型上找不到

markdown 结构de projet