为了账号安全,请及时绑定邮箱和手机立即绑定

如果把size改成一个定值就可以运行且结果正确,难道是malloc的bug?

如果把size改成一个定值就可以运行且结果正确,难道是malloc的bug?

慕哥9229398 2023-05-01 12:08:38
RT,这是个简单的代码处理数组插入,想在插入时判断此时数组是否将满,如果是就将数组扩大的原来的2倍。不明白为什么int *newspace=(int*)malloc(size*sizet);有什么错误,如果把size改成一个定值就可以运行且结果正确,难道是malloc的bug?#include <stdlib.h>//malloc#include <string.h>//memset#include <stdio.h>//printf#define MAXIMUM 100struct SeqList{  int n;  int * array;  int max; };typedef struct SeqList *PSeqList;PSeqList createSeqList(int size){   PSeqList ptrSeqList=(PSeqList)malloc(sizeof(struct SeqList));  if(ptrSeqList==NULL){    return NULL;   }      ptrSeqList->n=0;   ptrSeqList->array=(int*)malloc(size*sizeof(int));   ptrSeqList->max=size;  return ptrSeqList; }int insertElement(int pos, int val, PSeqList pSeqList){  if(pSeqList==NULL)    return -1;     if(pSeqList->n==pSeqList->max){    int size=pSeqList->n<<1;    int sizet=sizeof(int);    int *newspace=(int*)malloc(size*sizet);    memset((void*)newspace,0,size*sizeof(int));    int i=0;    while(i++<pSeqList->max){       newspace[i]=pSeqList->array[i];     }    free(pSeqList->array);     pSeqList->array=newspace;     pSeqList->max<<=1;   }  if(pSeqList->n==0){     pSeqList->array[0]=val;     pSeqList->n++;    return 0;   }  int i;  for(i=pSeqList->n;i>=pos;--i){     pSeqList->array[i+1]=pSeqList->array[i];   }   pSeqList->n++;   pSeqList->array[pos]=val; }void printArray(PSeqList ptrSeqList){  printf("n: %d\n",ptrSeqList->n);  printf("max: %d\n",ptrSeqList->max);  int i=0;  for(i;i<ptrSeqList->n;++i){    printf("%d ",ptrSeqList->array[i]);   } }int main(int argc, char*argv[]){   PSeqList ptrSeqList=createSeqList(5);  printArray(ptrSeqList);  int i=0;  for(i=0;i<10;++i){    insertElement(i,i,ptrSeqList);   }  printArray(ptrSeqList);  insertElement(5,110,ptrSeqList);  printArray(ptrSeqList);  return 0; }
查看完整描述

1 回答

?
温温酱

TA贡献1752条经验 获得超4个赞

下次记得先使用valgrind自己检查一遍。

我用valgrind运行了一遍,显示你的代码在main的

  for(i=0;i<10;++i){
    insertElement(i,i,ptrSeqList);
  }

中,在insertElement的

  int i;  for(i=pSeqList->n;i>=pos;--i){
    pSeqList->array[i+1]=pSeqList->array[i];
  }

中,数组越界了。


查看完整回答
反对 回复 2023-05-03
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信