C,我打印出随机数字(不是地址)而不是扫描数字

时间:2018-01-09 18:09:55

标签: c scanf

我得到了下一个代码,并且对于循环中的前6个扫描它的工作正常但是在第7次它将数组中的一个数字更改为313 ***(当*是随机数时)如果我继续扫描数字,它仍然在4-6扫描中发生此错误一次。 有谁知道这意味着什么?

int* take2(int num){
            static int size=0;
            int i,mid;
            static int* arr;
            if (size==0){
                 arr = (int*)calloc(1, sizeof(int));
                if (!arr) {
                    printf("ERROR! Not enough memory!\n");
                    exit(1); 
                }
                size=1;
                arr[0]=num;
            }
            else {
                size++;
                arr = (int*)realloc(arr, size*sizeof(int));
                if (!arr) {
                     printf("ERROR! Not enough memory!\n");
                    exit(1); 
                }
                for (i = 0; i<size; i++ ){
                     if (arr[i]<num){
                     swap(&num,&arr[i]);
                    }
                }
            }
            mid=size/2;
            printf("the middle number is: %d\n",arr[mid]);
            for (i = 0; i<size; i++ ){
              printf(" ,%d",arr[i]);
            }
            return arr;
    }

主要是:

void main(){    int flag1=1;
    int num1;
    int *arr1;
    while(flag1){
      printf("\n enter a number: \n if you want to exit press -1\n");
      scanf("%d" ,&num1 );
      if (num1==-1) break;
      arr1=take2(num1);
    }
    free(arr1);
}

当我运行这个功能时(主要是我在循环中扫描数字..)我得到7个数字下一个输出:(此输出是在7次扫描后)

the middle number is: 3
 ,6 ,5 ,4 ,3 ,2 ,1
 enter a number:
 if you want to exit press -1
7
the middle number is: 4
 ,7 ,6 ,5 ,4 ,3 ,2 ,31361
 enter a number:
 if you want to exit press -1

1 个答案:

答案 0 :(得分:2)

你有问题:

            size++;
            arr = (int*)realloc(arr, size*sizeof(int));
            if (!arr) {
                 printf("ERROR! Not enough memory!\n");
                exit(1); 
            }
            for (i = 0; i<size; i++ ){
                 if (arr[i]<num){       // arr[size-1] has indeterminate value
                 swap(&num,&arr[i]);
                }
            }

realloc之后,您访问整个数组,但您从未写入新元素。请记住,realloc会留下具有不确定值的新内存。

也许你错过了

arr[size-1] = num;
循环之前