你给出的代码出现报错严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C2131 表达式的计算结果不是常数 Project1 E:\桌面\制作\程序\Project1\源.cpp 42
时间: 2023-07-06 12:31:42 浏览: 117
抱歉,这是因为在C语言中,不能将一个非常量的值用来声明数组的大小。如果需要动态分配数组,可以使用malloc函数。以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
void merge(int arr[], int left[], int left_size, int right[], int right_size) {
int i = 0, j = 0, k = 0;
while (i < left_size && j < right_size) {
if (left[i] < right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
while (i < left_size) {
arr[k++] = left[i++];
}
while (j < right_size) {
arr[k++] = right[j++];
}
}
void merge_sort(int arr[], int size) {
if (size <= 1) {
return;
}
int mid = size / 2;
int *left = (int *) malloc(mid * sizeof(int));
int *right = (int *) malloc((size - mid) * sizeof(int));
for (int i = 0; i < mid; i++) {
left[i] = arr[i];
}
for (int j = mid; j < size; j++) {
right[j - mid] = arr[j];
}
merge_sort(left, mid);
merge_sort(right, size - mid);
merge(arr, left, mid, right, size - mid);
free(left);
free(right);
}
int main() {
int n;
scanf("%d", &n);
int *arr = (int *) malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
merge_sort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
free(arr);
return 0;
}
```
修改后的代码使用了malloc函数动态分配了数组空间,可以避免编译时的报错。同时,在程序结束时,需要使用free函数释放动态分配的空间,避免内存泄漏问题。
阅读全文