c - 是什么导致 C 中出现分段错误(核心转储)?
问题描述
我正在尝试用 C 编写汉明代码程序。但是,在编译后尝试运行 ./a.out 时,我不断收到分段错误(核心转储)错误。它编译时没有错误,我知道在尝试解决释放空间或修改字符串文字时可能会发生此错误。我不相信我在做这两件事,我只是有一个简单的矩阵我正在填写和交叉检查。对此问题的任何见解都将不胜感激,我已经在下面留下了到目前为止的代码:
这是一个家庭作业问题,涉及创建一个汉明代码程序来处理 data.dat 输入并将 1 和 0 的排序列表输出到文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
FILE *fp;
FILE *fpOut;
int main(int argc, char *argv[])
{
fp = fopen(argv[1], "r");
fpOut = fopen("sortedCodeWords.dat", "w");
int temp;
int numI = 0;
int count = 0;
char matrix1[7];
if(fp == NULL)
printf("File can not be opened");
else
{
char ch = getc(fp);
while(ch != EOF)
{
matrix1[2] = ch;
ch = getc(fp);
matrix1[4] = ch;
ch = getc(fp);
matrix1[5] = ch;
ch = getc(fp);
matrix1[6] = ch;
ch = getc(fp);
ch = getc(fp);
if(ch == '\n')
{
for(int i = 2; i < 7; i++)
{
if(matrix1[i] == '1')
numI++;
i++;
}
if(numI % 2 == 0)
matrix1[0] = 0;
else
matrix1[0] = 1;
numI = 0;
for(int i = 1; i < 7; i++)
{
if(matrix1[i] == '1')
numI++;
if(matrix1[i+1] == '1')
numI++;
i++;
i++;
}
if(numI % 2 == 0)
matrix1[1] = 0;
else
matrix1[1] = 1;
numI = 0;
for(int i = 4; i < 7; i++)
{
if(matrix1[i] == '1')
numI++;
}
if(numI % 2 == 0)
matrix1[3] = 0;
else
matrix1[3] = 1;
numI = 0;
for (int i = 0; i < 7; i++)
{
fprintf(fpOut, "%s", matrix1[i]);
}
fprintf(fpOut, "\n");
ch = getc(fp);
}
count++;
}
}
}
我希望输出到文件。我并不总是收到此错误,但是当我从 2D 数组更改为 1D 数组时,我现在收到此错误(我更改是因为我意识到没有必要)
解决方案
我还没有编译它,但我注意到的一件事是,它看起来好像你可能会离开你循环到的数组的末尾,但在一个实例中i<7
使用索引。i+1
也许在启用 AddressSanitizer 的情况下进行构建,并查看在检查了上述潜在问题后会收到哪些运行时警告。(应该只是在 gcc 命令中添加以下标志... -g -fsanitize=address -fno-omit-frame-pointer
推荐阅读
- r - 汇总/分组表中的唯一行
- bash - 如何将每个命令的 stout 重定向到 bash 中的单独日志文件?
- gtsummary - 在 gtsummary 中显示和比较连续变量的正态分布与非正态分布的简单方法
- azure - Power shell 命令禁用 Azure 数据工厂的网络设置
- angular - 关闭模式或背景点击后如何防止页面滚动到顶部?
- python - 如何检测时间序列中的翻转?
- css - 我可以更改css中元素的父级吗?
- php - 不允许在购物车中添加特定的产品数量
- hash - 哈希表函数 hlist_add_before 在 Linxu 内核中的实现
- microsoft-graph-api - 将 Graph API 端点轮询到 Teams 状态信息