RT,這是個(gè)簡(jiǎn)單的代碼處理數(shù)組插入,想在插入時(shí)判斷此時(shí)數(shù)組是否將滿,如果是就將數(shù)組擴(kuò)大的原來(lái)的2倍。不明白為什么int *newspace=(int*)malloc(size*sizet);有什么錯(cuò)誤,如果把size改成一個(gè)定值就可以運(yùn)行且結(jié)果正確,難道是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貢獻(xiàn)1752條經(jīng)驗(yàn) 獲得超4個(gè)贊
下次記得先使用valgrind自己檢查一遍。
我用valgrind運(yùn)行了一遍,顯示你的代碼在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]; }
中,數(shù)組越界了。
添加回答
舉報(bào)
0/150
提交
取消