Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Retroman
0 / 0 / 1
Регистрация: 27.01.2015
Сообщений: 36
1

Сортировка подсчетом и ошибка "Невозможно преобразовать "void*" в "int*"

09.05.2015, 13:01. Просмотров 1078. Ответов 7
Метки нет (Все метки)

Мне нужно отсортировать одномерный массив с помощью алгоритма сортировки, однако возникает ошибка "error C2440: инициализация: невозможно преобразовать "void *" в "int *" ". Подскажите, пожалуйста, как исправить эту ошибку, т.к. не имею понятия, как это сделать.
P.S. Код не мой, а взял готовый с http://austingwalters.com/counting-sort-in-c/ для курсовой.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <stdio.h>
#include <stdlib.h>
 
void printArray(int * array, int size){
 
  int curr;
  for(curr = 0; curr < size; curr++){
    printf("%d, ", array[curr]);
  }
  printf("\n");
}
 
int maximum(int * array, int size){
 
  int curr = 0;
  int max = 0;
 
  for(curr = 0; curr < size; curr++){
    if(array[curr] > max){ max = array[curr]; }
  }
 
  return max;
}
 
void countingSort(int * array, int size){
 
  int curr = 0;
  int max = maximum(array, size);
  int * counting_array = calloc(max, sizeof(int)); // Zeros out the array
 
  for(curr = 0; curr < size; curr ++){
    counting_array[array[curr]]++;
  }
 
  int num = 0;
  curr = 0;
 
  while(curr <= size){
    while(counting_array[num] > 0){
      array[curr] = num;
      counting_array[num]--;
      curr++;
      if(curr > size){ break; }
    }
    num++;
  }
  printArray(array, size);
}
 
int main(){
 
  int test1[] = {2, 6, 4, 3, 2, 3, 4, 6, 3, 4, 3, 5, 2, 6};
  int size1 = 14;
 
  countingSort(test1, size1);
 
  int test2[] = {5, 6, 7, 8, 5};
  int size2 = 5;
 
  countingSort(test2, size2);
 
  int test3[] = {8, 1, 2, 3, 3, 4};
  int size3 = 6;
 
  countingSort(test3, size3);
 
  return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2015, 13:01
Ответы с готовыми решениями:

Ошибка в переменных: Невозможно преобразовать "void *" в "int **"
после компиляции выдает ошибку: error C2440: =: невозможно преобразовать &quot;void...

Создать запись "Двигатель", которая содержит элементы "Название", "Мощность", "Скорость", "Цена"
Создать запись &quot;Двигатель&quot;, которая содержит элементы &quot;Название&quot;, &quot;Мощность&quot;,...

Невозможно преобразовать "int *" в "int"
Может кто поймет, что тут не так? #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot;...

Ошибка компиляции Cannot convert "int**" to "int*", "int*" to "int"
Здравствуйте, есть код. Выдает 2 ошибки: Cannot convert &quot;int**&quot; to &quot;int*&quot;...

Функция замены ":" на "_" в названии файла и ошибка "undefined reference to 'strcat'"
Добрый день,прошу помочь мне с такой проблемой: В общем есть...

7
samoy4kin
1 / 1 / 2
Регистрация: 25.07.2014
Сообщений: 10
09.05.2015, 19:25 2
попробуй в 29-ой строке перед calloc поставить (int*).

Добавлено через 12 минут
Забыл сказать: там вроде в камандах препроцессора надо подключить #include <malloc.h>
0
Retroman
0 / 0 / 1
Регистрация: 27.01.2015
Сообщений: 36
09.05.2015, 20:51  [ТС] 3
Если так, то выходит ошибка использование имени типа не допускается
C
1
int * counting_array = int* calloc(max, sizeof(int)); // Zeros out the array
0
Someone007
2677 / 2033 / 924
Регистрация: 09.05.2015
Сообщений: 5,021
Завершенные тесты: 1
09.05.2015, 20:54 4
Лучший ответ Сообщение было отмечено Retroman как решение

Решение

Может так:
C++
1
int * counting_array = (int*) calloc(max, sizeof(int)); // Zeros out the array
?
0
samoy4kin
1 / 1 / 2
Регистрация: 25.07.2014
Сообщений: 10
09.05.2015, 21:45 5
ты забыл скобки поставить. смотри, как написал тебе Someone007.
1
Retroman
0 / 0 / 1
Регистрация: 27.01.2015
Сообщений: 36
09.05.2015, 22:19  [ТС] 6
Спасибо за помощь, скомпилировалось как надо.

Добавлено через 22 секунды
Цитата Сообщение от Someone007 Посмотреть сообщение
Может так:
C++
1
int * counting_array = (int*) calloc(max, sizeof(int)); // Zeros out the array
?
Спасибо за помощь

Только у меня возникла новая проблема: Run-Time Check Failure #2 - Stack around the variable 'test3' was corrupted. Не подскажете, как можно исправить?
0
samoy4kin
1 / 1 / 2
Регистрация: 25.07.2014
Сообщений: 10
10.05.2015, 17:00 7
точно сказать не могу. Но если присмотреться, то можно обнаружить отсутствие очистки памяти после её выделения (функция free(указатель)).
А вообще этот код, который ты нашёл, весьма карявый...
0
Retroman
0 / 0 / 1
Регистрация: 27.01.2015
Сообщений: 36
10.05.2015, 17:02  [ТС] 8
Я заметил) Я теперь пробую сделать так, чтобы то, что ты предложил, заработало) Спасибо за идею.
0
10.05.2015, 17:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.05.2015, 17:02

Ввести структуру "историческое событие" с полями "число", "месяц", "год", "событие"
Ввести структуру ИСТОРИЧЕСКОЕ СОБЫТИЕ с полями ЧИСЛО, МЕСЯЦ, ГОД, СОБЫТИЕ....

Возврат функции из массива: Невозможно преобразовать аргумент 1 из "float" в "float []"
В общем выдаёт следующую ошибку. (невозможно преобразовать аргумент 1 из...

Подсчитать общее количество вхождений в строку символов "А", "a", "B" и "b"
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; main() { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru