malloc函数扰乱数组项(C)

时间:2017-01-26 11:33:57

标签: c arrays malloc

我正在编写一个需要将数字扫描到数组中的程序,我知道我的数组中的项目数将是5的倍数。我不能使用realloc函数,只能使用malloc,但我的程序搞乱了第6项,而10项后只是崩溃了。你能帮我找到我的错误吗?谢谢!

#include <stdio.h>
#include <stdlib.h>
#define K 5
int main(){
    int counter=0;
    int enteredNum;
    int *p=malloc(K*sizeof(int));
    int *pmore=NULL;
    printf("Please enter the series : \n");
    scanf("%d",&enteredNum);
    while(enteredNum!=0){
            p[counter]=enteredNum;
            if(counter%K==0&&counter!=0){
                pmore=malloc(((counter)+K)*sizeof(int));

                for(int i=0;i<counter;i++){
                    pmore[i]=p[i];
                //for
                free(p);
                p=pmore;
                pmore=NULL;
            }//if
            counter++;
            scanf("%d",&enteredNum);
    }


    for(int i=0;i<counter;i++)
        printf("%d\t",p[i]);
}

1 个答案:

答案 0 :(得分:2)

在放大p[counter]之前设置p。因此,当K为5时,counter%Kcounter为5之前不会为零,但到那时为时已晚,您已经存储了六个p(0,1,2,3,4和5)中的元素,只有足够的空间容纳5。