【发布时间】:2016-01-03 18:52:13
【问题描述】:
我以 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 和消息错误出现'segmentation error.....'
请帮帮我
【问题讨论】:
-
在你的
unpack函数中,这些变量没有被使用,你应该删除它们:ret_code、ch_bit和ch_word。变量ch_bit被赋值但从未被访问过。 -
C++(和C)中的函数并不总是需要返回值。如果您总是从函数返回 0,请将函数的返回类型更改为
void并删除return语句。 -
尝试每行放置一个参数。这使您的代码更易于阅读(我必须保持水平滚动才能看到
unpack的所有参数)。 -
另外,考虑将一些参数删除到
unpack_code,因为它们没有被函数使用。 -
这可能是一个X-Y 问题:需要回答的是关于更大的图片 的问题,而不是这些较低级别的问题。一种迹象是调用
unpack_code,参数值全为0。