,c"/>

首页 > 解决方案 > 为什么它在 VisualStudioCode 中运行良好但在 ubuntu 18.04 中运行良好?

问题描述

Bae:01000000000:Busy
Baek:01000000000:0222875074
Jung:022000000:Goodman
Kim:0102000000:
Han:010300000:ddd

///这是一些数据

#define MAX_LIST 1000
#define MAX_LINE 100

typedef struct
{
    char name[20];
    char phone[30];
    char memo[40];
} Tel;

Tel arr[MAX_LIST];
static int count = 0;

///这是结构

    void showList()
{
    char line[MAX_LINE];
    FILE *fp = fopen("data.txt", "r");
    while (!feof(fp))
    {
        Tel element;
        fgets(line, MAX_LINE, fp);
        char *ptr = strtok(line, ":"); token --> ' : ' 
        strcpy(element.name, ptr);
        ptr = strtok(NULL, ":");
        strcpy(element.phone, ptr);
        ptr = strtok(NULL, "\n");
        if (ptr == NULL)  //When the next part is empty
        {  
            ptr = " ";
        }
        strcpy(element.memo, ptr);
        arr[count++] = element;
    }  **//Everything is saved in the arr[], but a segmentation fault occurs after that.**
    fclose(fp);
    for (int i = 0; i < count; i++)
    {
        printf("%d : %s %s %s\n", i, arr[i].name, arr[i].phone, arr[i].memo);
    }
}

分段错误(核心转储)

///我想知道,为什么在ubuntu 18.04的while循环之后会出现分段错误

我想继续下一个。

标签: c

解决方案


它的工作原理是不同的编译器以不同的方式运行。因此,虽然某段代码可能存在内存泄漏,但您在 vscode 上的编译器可能会忽略它。但是,在 Ubuntu 上可能并非如此。您可以使用 Valgrind 查找此内存泄漏发生的位置并解决此问题。另外,我想提一下,如果某些编译器显示内存泄漏,这主要意味着存在内存泄漏,最好的做法是找出它,即使您大部分时间都在使用 vscode。这是因为如果你不解决这个问题,那么当你的程序开发时,它会开始表现得很奇怪。在此处了解有关 valgrinf 的更多信息。

在此处了解有关 Valgrind的更多信息。


推荐阅读