尝试释放malloc时出错,>> [

问题描述 投票:0回答:1
因此,我从学校开始编写一个函数,该函数获取一个int“ size”参数,一个整数数组和一个int标志,并返回一个指针数组,该指针包含指向原始int数组单元格的指针以排序方式(如果flag == 1,则升序,否则降序)。我基本上是根据归类排序的原理写的,但是由于某种原因,我得到了runtime error当程序尝试执行第123行(释放temp int **数组)时发生知道为什么会发生以及它是否可修复吗?

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #define SIZE 100 int** pointerSort(int* arr, unsigned int size, int ascend_flag); void ptrMerge(int arr[], int start, int mid, int end, int* ptrArr[],int flag); void pmergeSort(int arr[], int start, int end, int* ptrArr[], int flag); void main() { unsigned int size, i; int arr[SIZE]; int** pointers; int ascend_flag; printf("Please enter the number of items:\n"); scanf("%u", &size); for (i = 0; i < size; i++) scanf("%d", &arr[i]); scanf("%d", &ascend_flag); pointers = pointerSort(arr, size, ascend_flag); printf("The sorted array:\n"); //Print the sorted array //printPointers(pointers, size); for (i = 0; i < size; i++) printf("d%\t%d", *pointers[i], pointers[i]); free(pointers); } int** pointerSort(int* arr, unsigned int size, int ascend_flag) { int** sortedArr; sortedArr = (int**)malloc(size * sizeof(int*)); pmergeSort(arr,0,size-1,sortedArr,ascend_flag); return sortedArr; } void pmergeSort(int arr[], int start, int end, int* ptrArr[],int flag) { if(start<end) { int mid = (start + end) / 2; pmergeSort(arr, start, mid, ptrArr,flag); pmergeSort(arr, mid+1, end, ptrArr,flag); ptrMerge(arr, start, mid, end, ptrArr,flag); } } void ptrMerge(int arr[], int start, int mid, int end, int* ptrArr[],int flag) { int i, k = 0;; int p = start, q = mid + 1; int** tempArr; tempArr = (int**)malloc((end - start + 1) * sizeof(int*)); for (i = start; i <= end; i++) { if (arr[p] < arr[q]) { tempArr[k] = &arr[p]; k++; p++; } else //(arr[p] > arr[q]) { tempArr[k] = &arr[q]; k++; q++; } } while (p <= mid) { tempArr[k] = &arr[p]; k++; p++; } while (q <= end) { tempArr[k] = &arr[q]; k++; p++; } if (flag == 1) { for (i = 0; i < k; i++) { ptrArr[start] = tempArr[i]; start++; } } else { for (i = k-1; i >= start; i--) { ptrArr[start] = tempArr[i]; start++; } } for (i = 0; i < k; i++) printf("%x\t%d\n", ptrArr[i], *ptrArr[i]); printf("\n"); free(tempArr); }

所以我从学校开始就被要求编写一个函数,该函数获取一个int“ size”参数,一个整数数组和一个int标志,并返回一个指针数组,该指针数组保存指向...单元格的指针。 >
c arrays sorting
1个回答
0
投票
您必须释放temp数组中的每个元素,然后释放temp数组!

Ex:

© www.soinside.com 2019 - 2024. All rights reserved.