我已经制作了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
和消息错误出现'细分错误.....'
请帮帮我
答案 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;
}