c语言 - 运行时检查失败 #2 - 变量周围的堆栈'array'已损坏



我这里有这个代码,它正在工作,但当它到达最后时,它会抛出一个运行时检查,我不知道为什么,同时试图在最后释放内存也会导致不同的异常"访问违规读取位置0x00000024";我不知道出了什么问题

# include<stdio.h>
# include <stdlib.h>
int createTheArray(int *array) {
int y;
printf("Enter the number of random numbers you wish to create and store: ");
scanf_s("%i", &y);
array = (int *)calloc(y,sizeof(int));
if (array == NULL)
printf("Out of memory");
else {
printf("Memory allocated n");

return y;
}
}
void populateArray(int* array, int y) {
int x;
for (x = 0; x < y; x++) {
array[x] = rand() % 100;
}
for (x = 0; x < y; x++) {
printf("array[%i]: %in", x ,array[x]);
}
}
void operateArray(int* array, int y) {
int i,sum=0,high=0,low=array[0];
float average;
for (i = 0; i < y; i++) {
sum = sum + array[i];
if (array[i] > high)
high = array[i];
if (array[i] < low)
low = array[i];
}
average = (float) sum / y;
printf("n");
printf("Sum: %i n", sum);
printf("high: %i n", high);
printf("low: %i n", low);
printf("Average: %.1f n", average);
}
main() {
int* array = (int *)calloc(1,sizeof(int));
int y;
y = createTheArray(array);
populateArray(array,y);
operateArray(array, y);
free(array);

return 0;
}

这是我正在讨论的设计。这就避免了需要函数返回两件事。一般来说,一个函数应该有一个目的("创建数组"(,而不是有额外的隐藏函数("向用户询问大小"(。我的意思是:

#include <stdio.h>
#include <stdlib.h>
int * createTheArray(int size) {
int *x = (int*)calloc(size, sizeof(int));
if (x == NULL)
printf("Out of memory");
else
printf("Memory allocated n");
return x;
}
void populateArray(int *array, int y) {
int x,k;
for (x = 0; x < y; x++) {
array[x] = rand() % 100;
}
for (k = 0; k < y; k++) {
printf("array[%i]: %in", k, array[k]);
}
}
void operateArray(int* array, int y) {
int i,sum=0,high=0,low=array[0];
float average;
for (i = 0; i < y; i++) {
sum = sum + array[i];
if (array[i] > high)
high = array[i];
if (array[i] < low)
low = array[i];
}
average = (float) sum / y;
printf("Sum: %i n", sum);
printf("high: %i n", high);
printf("low: %i n", low);
printf("Average: %.1f n", average);
}
main() {
int *array;
int y;
printf("Enter the number of random numbers you wish to create and store: ");
scanf("%i", &y);
array = createTheArray(y);
populateArray(array,y);
operateArray(array, y);
free(array);
return 0;
}

最新更新