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循环之后会出现分段错误
我想继续下一个。
解决方案
它的工作原理是不同的编译器以不同的方式运行。因此,虽然某段代码可能存在内存泄漏,但您在 vscode 上的编译器可能会忽略它。但是,在 Ubuntu 上可能并非如此。您可以使用 Valgrind 查找此内存泄漏发生的位置并解决此问题。另外,我想提一下,如果某些编译器显示内存泄漏,这主要意味着存在内存泄漏,最好的做法是找出它,即使您大部分时间都在使用 vscode。这是因为如果你不解决这个问题,那么当你的程序开发时,它会开始表现得很奇怪。在此处了解有关 valgrinf 的更多信息。
在此处了解有关 Valgrind的更多信息。
推荐阅读
- reactjs - 如何在对象中执行 jest.fn() ?
- scala - 是否需要为 Spark jdbc 源添加 SaveMode Delete、Update 和 Upsert?
- c# - 使用实体框架删除/删除外键
- arm - Keil uVision 将我的代码编译成 0xfff-s
- java - Java - 将文件从客户端复制/粘贴到服务器出现错误 - UTF-8 编码问题打开文件
- google-cloud-firestore - 文档更新 - 没有更改的更新仍然需要 1 次写入吗?
- maven - E: 找不到包 openjdk-11-jdk
- git - VS 2019 Git 超时连接到 bitbucket
- sql-server - Select可以阻止插入的表格吗?
- r - 更改基本 R 图中的字体