c - 垂直冗余检查中的段错误

标签 c pointers error-detection

我正在尝试用 C 语言编写程序来进行垂直冗余检查。代码如下:

#include<stdio.h>
#include<sys/types.h>
#include<fcntl.h>
#include<unistd.h>

    int main()
    {
        int fd,i;
        char *data = "01010101010111110101010101011111";
        int count = 0,bit_count=0;
        char *parity_bit_array = NULL;
        char *data_to_send = NULL;
        char *stream_name = "Named Stream";
        do
        {
            if(*data == '1' && bit_count <= 8)
            {
                count++;
                if(bit_count == 8) 
                {
                        if( count % 2 == 0)
                        {
                            *parity_bit_array = '1';
                            count = 0;
                            bit_count = 0;
                        }
                        else
                        {
                            *parity_bit_array = '0';
                            count = 0;
                            bit_count = 0;
                        }
                }
            }
            bit_count++;
            data++;
        } while( !data);
        do
        {
            if(bit_count <= 8)
            {
                *data_to_send++ = *parity_bit_array++;
            }
            *data_to_send++ =  *data;
        } while( !data );
        printf("%s \n",data_to_send);
        mkfifo(stream_name,0666);
        fd = open(stream_name,O_WRONLY);
        write(fd,data_to_send,sizeof(data_to_send));
        close(fd);
        unlink(stream_name);
        return 0;
    }

下面所示的文件是发送方文件,接收方要读取其中的数据。 通过使用大小数组,它可以正常工作,但我喜欢将它与指针一起使用。 此代码中的主要变量:

  1. 数据:要实现 VRC 的数据
  2. 计数:偶校验位计数为 1
  3. bit_count:计算 8 位
  4. parity_bit_array:收集数据中每个字节的奇偶校验位
  5. data_to_send:data + parity_bit_array 的组合

例如: 数据: 01110000 parity_bit_array:1 要发送的数据: 011100001

最佳答案

您没有为 char 指针分配内存,并且您正在尝试写入它们,这将导致未定义的行为,从而导致段错误。

 *parity_bit_array = '1';

这段代码中有多个这样的情况。

 char *data_to_send = NULL;

data_to_send 指针从未分配内存,并且您尝试写入它

*data_to_send++ = *parity_bit_array++;

为 char 指针分配内存,例如

 char *data_to_send = malloc(20);

在写入此数组时,如果您看到已写入 20 个字节,只需对同一内存执行 realloc()

char *temp = realloc(data_to_send,40);
if(temp != NULL)
data_to_send = temp;

关于c - 垂直冗余检查中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28831520/

相关文章:

firefox - 使用 Firebug 检测网页上的错误

c - Linux 内核模块 - 生成两个具有共享本地 header 的模块

programming-languages - 腮腺炎编程检查超时

c - 使用 printf 的大数字

struct 中的一个元素可以访问 C 中自身的另一个元素吗?

c - 为什么 *str1 和 *(&str1)(str 是 C 中 char 数组的名称)的计算结果不一样?

C++、仿函数、特定任务/场景、将用户输入映射到函数

networking - 什么是CRC?它如何帮助错误检测?

c++ - 指向结构体指针数组的指针

c - 如何从 C 语言安装的文本文件中获取变量