Я пытаюсь реализовать функцию сортировки (подсчет сортировки, это, вероятно, неправильно):Проблемы с динамическим распределением памяти в C
void countingsortmm(int* numbers, int len, int min, int max) {
printf("Sorting %d integers with the min: %d and max: %d\n",len,min,max);
int countLen = max-min+1;
/* create an array to store counts for the occurences of a number. */
int* countingArray = (int*)malloc(countLen);
/* init all values to 0 */
for(int i = 0; i < countLen; i++) countingArray[i] = 0;
/* increment at indexes where a number occurs */
for(int i = 0; i < len; i++) countingArray[numbers[i]]++;
/* add previous indexes */
for(int i = 1; i < countLen; i++) countingArray[i] += countingArray[i-1];
/* Array where numbers will be places in a sorted order. */
int* sortedArray = (int*)malloc(len);
/* put numbers in proper place in new array and decrement */
for(int i = len-1; i >= 0; i--) sortedArray[countingArray[numbers[i]]--] = numbers[i];
/* copy contents of new sorted array to the numbers parameter. */
for(int i = 0; i < len-1; i++) numbers[i] = sortedArray[i];
free(sortedArray);
free(countingArray);
}
Но я получаю следующее сообщение об ошибке:
malloc: *** error for object 0x7f8728404b88: incorrect checksum for freed object - object was probably modified after being freed.
Получаю очко в int* sortedArray = (int*)malloc(len);
.
Я использую malloc()
дважды, чтобы создать два различных массивов в пределах функции, и я не free()
их обоих в конце функции, когда они больше не нужны. После этого я не буду явно изменять или получать доступ к их содержимому.
Так что же вызывает эту проблему?
@Cornstalks: Почему вы не ответили вместо этого своим комментарием, понимая, как это действительно правильный ответ? :) – Dolda2000
@ Dolda2000: Я не уверен ... Полагаю, мне было слишком лениво прокручивать лишнюю сумму в зону ответа? – Cornstalks
, пожалуйста, [не использовать] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) возвращаемое значение 'malloc()'. –