亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果把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 關注
  • 216 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號