程序接收信号SIGSEGV分段故障

时间:2016-01-03 18:52:14

标签: c++ c pointers struct

我已经制作了MCVE例程,程序崩溃并在我添加到unpack_code函数之后返回255以下(之前它正在工作):

int ch_bit; 
unsigned int *ch_word; 
ch_bit = *p_ch_bit; 

到下面的代码

#include <stdio.h>
#include <stdlib.h>

struct melp_param *par;

void unpack_code( unsigned int **p_ch_beg, int *p_ch_bit, 
        int *p_code, int numbits, int wsize,unsigned int erasemaks)
{
      int ret_code;
      int ch_bit;
      unsigned int *ch_word;
      ch_bit = *(p_ch_bit);
      *p_code = 0;

}

void melp_chn_read(struct melp_param *par, 
                   struct melp_param *prev_par)
{



}

int main(void)
{
      int bit_buffer[42];

    unpack_code(NULL, NULL, bit_buffer, 0, 0, 0);

    return 0;

}

逐步调试后:*p_ch_bit=Cannot access memory at address 0x0和消息错误出现'细分错误.....'

请帮帮我

2 个答案:

答案 0 :(得分:5)

您为p_ch_bit传递了NULL,并且在尝试取消引用该指针时崩溃了。

我建议学习如何使用调试器来了解将来会发生什么事情。这真的很有帮助!

答案 1 :(得分:1)

void unpack_code(unsigned int **p_ch_beg, int *p_ch_bit, int *p_code, int numbits, int wsize,unsigned int erasemaks)

     unpack_code(                   NULL,          NULL,  bit_buffer,           0,         0,                     0);

如果你排除了你的定义并调用unpack_code,你会发现你实际上正在为NULL参数传递p_ch_bit。你需要解决这个问题。

您可能需要执行以下操作:

#include <stdio.h>
#include <stdlib.h>

struct melp_param *par;

void unpack_code( unsigned int **p_ch_beg, int *p_ch_bit, 
        int *p_code, int numbits, int wsize,unsigned int erasemaks)
{
      int ret_code;
      int ch_bit;
      unsigned int *ch_word;
      ch_bit = *(p_ch_bit);
      *p_code = 0;

}

void melp_chn_read(struct melp_param *par, 
                   struct melp_param *prev_par)
{



}

int main(void)
{
    int bit_buffer[42];
    int code; // <------------------------------------------- this

    unpack_code(NULL, bit_buffer, &code, 0, 0, 0); // <------ and this

    return 0;

}