我得到了下一个代码,并且对于循环中的前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
答案 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;
循环之前