С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22

Динамическая память, ошибка с конвертом типов данных

25.04.2012, 00:23. Показов 1090. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Задание: Найти индекс минимального элемента в:
1)Символьном массиве из 8 элементов;
2)массиве целых чисел из 10 элементов;
Память для входящих данных в каждой из двух частей нужно динамично захватить, а после выполнения этой части задания освободить. Все нужно сделать на 1 кнопке.


Вот код

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
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int *min=NULL,*imin=NULL,*Len;
min=new(int);
imin=new(int);
Len=new(int);
imin=0;
typedef AnsiString StringType;
StringType *pstr=NULL;
pstr=new(AnsiString);
Len=Edit1->GetTextLen();
if(Len!=8){ShowMessage("Íåïðàâèëüíûé ââîä");return;}
pstr=Edit1->Text;
min=(*pstr)[1];
for(int i=2;i<8;i++)
if((*pstr)[i]<min){min=(*pstr)[i];imin++;};
Edit2->Text=IntToStr(imin);
delete[] pstr,min,imin,Len;
pstr=NULL;
 
//--------------------------------
//Êîíåö 1 ÷àñòè
//--------------------------------
 
imin=0;
typedef int Inttype[10];
Inttype *pA=NULL;
pA=new(Inttype[10]);
Len=Memo1->Lines->Count;
if(Len!=10){ShowMessage("Íåïðàâèëüíûé ââîä");return;}
for(int i=0;i<10;i++)
(*pA)[i]=StrToInt(Memo1->Lines->Strings[i]);
min=(*pA)[0];
for(int i=1;i<10;i++)
if((*pA)[i]<min){min=(*pA)[i];imin++;};
Edit3->Text=IntToStr(imin);
delete[] min,imin,Len,pA;
min=NULL;
imin=NULL;
Len=NULL;
pA=NULL;
}
Компилятор выдает только вот такого типа ошибки:
Cannot convert 'int' to 'int *' и Cannot convert 'char' to 'int *'


В чем ошибка ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.04.2012, 00:23
Ответы с готовыми решениями:

Ссылочный тип данных. Динамическая память
Напишите программу заполнения и сортировки по столбцам массива 4x5.

Ссылочный тип данных. Динамическая память
Создайте файл состоящий из записей содержащих поля: 1) номер 2) фамилия 3) телефон. Организуйте вывод на экран монитора номера телефона по...

Динамическая подгрузка роликов и данных выжирает память
Здравствуйте! Из всего программирования конкретно с Flash/ActionScript раньше практически не сталкивался, потому пока не успел понять...

19
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 00:37
В каких строках?
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 00:40  [ТС]
В 11, но вроде было и еще где то.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 00:42
C++
1
*Len=Edit1->GetTextLen();
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 00:48  [ТС]
Цитата Сообщение от Horersey Посмотреть сообщение
В 11, но вроде было и еще где то.
11,12,14,16 две,30,33,35 две - это все ошибки.

Добавлено через 3 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
*Len=Edit1->GetTextLen();
Перед всеми динамическими переменными должен быть знак "*" ?
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 01:00  [ТС]
Теперь, в первой части задания, если ввожу 8 символов, то выскакивает вот такая вот ошибка
Миниатюры
Динамическая память, ошибка с  конвертом типов данных  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 01:11
Перед всеми динамическими переменными должен быть знак "*" ?
http://translated.by/you/a-beg... s/into-ru/
http://programmersclub.ru/20/

Добавлено через 5 минут
А вообще код какой-то бредовый, что за запись new(int) зачем скобки? зачем использовать AnsiString ?
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 01:16  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А вообще код какой-то бредовый, что за запись new(int) зачем скобки? зачем использовать AnsiString ?
Ну как на лекции объясняли так и сделал по примеру.
AnsiString юзаю потому что, для первого задания нужен символьный массив.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 01:19
Символьный динамически созданный массив
C++
1
2
char *ch = new char[255];
delete[] ch;
Тоже самое с int
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 01:27  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Символьный динамически созданный массив
C++
1
2
char *ch = new char[255];
delete[] ch;
Тоже самое с int
Хорошо, допустим с объявлением криво но компилятор хавает, ошибка ведь не в объявлении?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 01:44
C++
1
Edit3->Text=IntToStr(imin);
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 01:56  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
Edit3->Text=IntToStr(imin);
хех, да что за не пруха, теперь 18 строчка
Миниатюры
Динамическая память, ошибка с  конвертом типов данных  
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 02:01
C++
1
delete[] min,Len,pA;
Добавлено через 2 минуты
imin создан не динамически, а значит и удалять его нельзя
0
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 02:31  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
C++
1
delete[] min,Len,pA;
Добавлено через 2 минуты
imin создан не динамически, а значит и удалять его нельзя
Как это не динамически? Он создан как раз таки динамически.

int *min=NULL,*imin=NULL,*Len;

imin=new(int);
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 02:43
А это тогда что за лажа?
C++
1
imin=0;// строка 7
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
25.04.2012, 03:12
Цитата Сообщение от Avazart Посмотреть сообщение
А это тогда что за лажа?
Равноценно присваиванию NULL, правда сомневаюсь, что используется по назначению. Меня больше смущает хаотичное объявление, выделение памяти и не менее хаотичное ее освобождение. Далее эпититы приводить не буду, из конструктивного - совет разобраться с работой динамической памяти.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.04.2012, 03:31
Там поидее
C++
1
*imin=0;// строка 7
1
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 15:35  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Там поидее
C++
1
*imin=0;// строка 7
Неа, это ничего не дает, такая же ошибка.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
25.04.2012, 20:03
Вот, арбайтен. Если надо, подрихтуйте заменой wchar_t на char, wcscpy( ) на strcpy( ) и w_str( ) на c_str( )...
Использование здесь typedef и динамического выделения памяти под временные переменные представляется мне не шибко логичным.
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
    int min, min_index;
    wchar_t *chbuf = NULL;
    chbuf = new wchar_t[20];
 
    if ( Edit1->GetTextLen( ) != 8 ) {
        ShowMessage( "Введите 8 символов в строчку. Больше-меньше - нихт ферштейн..." );
        return;
    }
    wcscpy( chbuf, Edit1->Text.w_str( ) );
 
    min = chbuf[min_index = 0];
    for ( int i = 1; i < 8; i++ ) {
        if ( chbuf[i] < min ) {
            min = chbuf[i];
            min_index = i;
        }
    }
    Edit2->Text = IntToStr( min_index );
 
    delete[]chbuf;
    chbuf = NULL;
    // --------------------------------
    // Конец 1 части
    // --------------------------------
    int *arr = NULL;
    arr = new int[20];
 
    if ( Memo1->Lines->Count != 10 ) {
        ShowMessage( "Ведите 10 чисел по одному на строчку. Не больше и не меньше :P" );
        return;
    }
    min = StrToInt( Memo1->Lines->Strings[min_index = 0] );
    for ( int i = 1; i < 10; i++ ) {
        arr[i] = StrToInt( Memo1->Lines->Strings[i] );
        if ( arr[i] < min ) {
            min = arr[i];
            min_index = i;
        }
    }
    Edit3->Text = IntToStr( min_index );
 
    delete[]arr;
    arr = NULL;
1
0 / 0 / 0
Регистрация: 11.04.2012
Сообщений: 22
25.04.2012, 22:26  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
Вот, арбайтен. Если надо, подрихтуйте заменой wchar_t на char, wcscpy( ) на strcpy( ) и w_str( ) на c_str( )...
Использование здесь typedef и динамического выделения памяти под временные переменные представляется мне не шибко логичным.
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
    int min, min_index;
    wchar_t *chbuf = NULL;
    chbuf = new wchar_t[20];
 
    if ( Edit1->GetTextLen( ) != 8 ) {
        ShowMessage( "Введите 8 символов в строчку. Больше-меньше - нихт ферштейн..." );
        return;
    }
    wcscpy( chbuf, Edit1->Text.w_str( ) );
 
    min = chbuf[min_index = 0];
    for ( int i = 1; i < 8; i++ ) {
        if ( chbuf[i] < min ) {
            min = chbuf[i];
            min_index = i;
        }
    }
    Edit2->Text = IntToStr( min_index );
 
    delete[]chbuf;
    chbuf = NULL;
    // --------------------------------
    // Конец 1 части
    // --------------------------------
    int *arr = NULL;
    arr = new int[20];
 
    if ( Memo1->Lines->Count != 10 ) {
        ShowMessage( "Ведите 10 чисел по одному на строчку. Не больше и не меньше :P" );
        return;
    }
    min = StrToInt( Memo1->Lines->Strings[min_index = 0] );
    for ( int i = 1; i < 10; i++ ) {
        arr[i] = StrToInt( Memo1->Lines->Strings[i] );
        if ( arr[i] < min ) {
            min = arr[i];
            min_index = i;
        }
    }
    Edit3->Text = IntToStr( min_index );
 
    delete[]arr;
    arr = NULL;
А ты прям с юморком такой, спс =)
Нужно будет почитать про указатели.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2012, 22:26
Помогаю со студенческими работами здесь

База данных, список с двойной связью, динамическая память
Люди добрые, помогите пожалуйста) Задание: разработать информационно-справочную систему учета автомобилей. Предусмотреть...

Ошибка при передаче строки (списки и динамическая память)
задача кода принять из файла имена и если они начинаются на A вывести на экран, написал пока без файла, столкнулся с проблемой, int выводит...

Азы: статическая память, динамическая память, автоматическая память
столько раз приходистя возвращаться к началу, и все благодаря моим преподавателям, которые не давали задавать вопросы на парах, а если это...

Ссылочный тип данных. Динамическая память. Вывести содержание массива до и после сортировки
Напишите программу заполнения и сортировки по столбцам массива 4*5. Вывести содержание массива до и после сортировки. (используя ...

Запись данных в MS Access с ADOQuery (ошибка типов данных при записи)
Здравствуйте. Я добавила на форму три компонента ADOConnection, DataSource, ADOQuery. В ADOQuery прописала: SELECT*FROM Справочник ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru