用free()报错,可能的原因是什么?~

来源:百度知道 编辑:UC知道 时间:2024/07/07 21:21:38
PNumHead Multiply(PNumHead A, PNumHead B, PNumHead MU)
{
PNode Bcurrent = B->tail->pri;
PNode Acurrent = A->tail->pri;//初始化最后一位数
PNode MUcurrent = MU->tail->pri;//移动标志相乘到某个数
int *i;//存储A的数据
int *j;//存储B的数据
int *k;//存储MU = A*B的数据
int *imove;//用于指向当前的相乘位置
int *jmove;//用于指向当前的相乘位置
int *kmove;//指向当前累加的位置
int *kflag;//相乘后开始累加的位置
int *iflag;//释放节点时使用
int *jflag;//释放节点时使用
i = imove = iflag = (int *) malloc (sizeof( int ) * (A->xlen + A->zlen + 1));
j = jmove = jflag = (int *) malloc (sizeof( int ) * (B->xlen + B->zlen + 1));
k = kmove = kflag = (int *) malloc (sizeof( int ) * (A->xlen + A->zlen + B->xlen + B->zlen + 1));
if ( i == NULL || j == NULL || k ==NULL)
{
printf("error!\n");
exit(1);
}
memset(kmove,0,sizeof(int)*(A->xlen + A->zlen + B->xlen + B->zlen + 2));//初始化申请各个节点
i = DataCopy(

报的什么错?

你的K指向的地址有一部分或全部已经被 free函数释放过. free函数不能对一块地址重复调用。

“memset(kmove,0,sizeof(int)*(A->xlen + A->zlen + B->xlen + B->zlen + 2));//初始化申请各个节点”,这里的长度参数与malloc时不一致,是否应该是“memset(kmove,0,sizeof(int)*(A->xlen + A->zlen + B->xlen + B->zlen + 1));”

将“sizeof( int ) * (A->xlen + A->zlen + B->xlen + B->zlen + 1”定义为一个变量可能是个比较好的编程习惯。