Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
#1

Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; - C++

21.05.2013, 03:11. Просмотров 520. Ответов 10
Метки нет (Все метки)

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
 
typedef struct TStud    //основная структура
{
    char *fam;          //фамилия
    int age;            //возраст
} Stud;
 
 
void addStud(Stud *st, int m)   //функция добавления студента
{
    st[m].fam = new char[];     //выделение памяти под строку
    cout << "Familija studenta " << m+1 << ": ";    //приглашение ввода
    cin >> st[m].fam;   //ввод фамилии
    cout << "Vozrast studenta: ";
    cin >> st[m].age;   //ввод возраста
    cout << "Dannie dobavleni" <<endl;
    getch();    //ожидание нажатия клавиши
}
 
 
 
void printStud(Stud *st, int m) //функция вывода данных о студенте
{
    cout << setw(20) << "Familja studenta" << setw(20) << "Vozrast" << endl;    //вывод шапки (cetw(20) - табулирование в 20 символов)
    for (int i=0; i<=m; i++)    //цикл по количеству студентов
    {
        cout << setw(20) << st[i].fam << setw(20) << st[i].age << endl; //вывод фамилии и возраста
    }
    getch();    //ожидание нажатия клавиши
}
 
 
void sortStud(Stud *st, int m)  //функция сортировки студентов
{
    Stud tmp;   // временные переменная
    int min;
    for(int i=0; i<m; i++)  //цикл по количеству студентов
    {
        min=i;  //минимальная запись
        for(int j=i+1; j<=m; j++)   //цикл от следующей до последней записи
            if (strcmp(st[min].fam,st[j].fam)>0) min=j; //если текущая фамилия раньше по алфавиту, чем min, запоминаем
        tmp=st[i];      //меняем указатели
        st[i]=st[min];  //на них
        st[min]=tmp;    //местами
    }
    cout << "Dannie otsortirovani" <<endl;
    getch();    //ожидание нажатия клавиши
}
 
void saveStud(Stud *st, int m)  //функция сохранения в файл
{
                ofstream f;     //файловая переменная
                f.open("rezult.txt");   //открытие файла
                f << setw(20) << "Familja studenta" << setw(20) << "Vozrast" << endl;;  //запись шапки
                for (int i=0; i<=m; i++)    //цикл по количеству студентов
                {
                    f << setw(20) << st[i].fam << setw(20) << st[i].age << endl;    //вывод фамилии и возраста в файл
                }
                f.close();      //закрытие файла
}
 
void main() //основная функция
{
    int n=-1;   //индекс последней записи
    char c;     // переменная для ввода пункта меню
    Stud stud[30];  //массив мтудентов
    while (true)    //пока не завершена работа
    {
        system("cls");  //очистка экрана
        cout << "1.Dobavit` studenta\n2.Prosmotr studentov\n3.Sortirovat`\n4.Save & Exit"<<endl;    //меню
        cin >> c;   //ввод пункта
        switch (c)  //в зависимости от выбора
        {
        case '1': addStud(stud,++n); break;     //запуск
        case '2': printStud(stud,n); break;     //соответствующей
        case '3': sortStud(stud, n); break;     //функции
        case '4': saveStud(stud,n); return; //выход
        default: cout << "Nevernij vibor, povtorite..."<<endl; getch(); break;  //сообщение при неверном вводе
        }
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2013, 03:11     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[];
Посмотрите здесь:
C++ выдаёт ошибку в составленной программе выдаёт ошибку
Не выделяется память C++
C++ Выделяется ли память?
C++ При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
Не выделяется память в динамической памяти C++
Выделяется ли память для ссылки? C++
На каком этапе выделяется статическая память C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
21.05.2013, 05:53     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #2
Ну дак может размер укажешь?)
C++
1
st[m].fam = new char[10];
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 08:00     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #3
Недавно уже видел такое. Не понятно почему VS разрешает указывать пустые квадратные скобки при выделении памяти. По сути, это эквивалентно [0].
Croessmah
Модератор
Эксперт CЭксперт С++
13059 / 7322 / 817
Регистрация: 27.09.2012
Сообщений: 18,074
Записей в блоге: 3
Завершенные тесты: 1
21.05.2013, 09:17     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #4
используйте классы-обертки, чтобы не возиться с кучей
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:20  [ТС]     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #5
Цитата Сообщение от ITcrusader Посмотреть сообщение
Ну дак может размер укажешь?)
C++
1
st[m].fam = new char[10];
тогда у меня вылазит ошабка следующего вида

[ILINK32 Error] Error: Unresolved external '__InitVCL' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\7.0\LIB\CP32MTI.LIB|crtlvcl
[ILINK32 Error] Error: Unresolved external '__ExitVCL' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\RAD STUDIO\7.0\LIB\CP32MTI.LIB|crtlvcl
[ILINK32 Error] Error: Unable to perform link
Failed
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 11:30     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #6
Цитата Сообщение от Mitax Посмотреть сообщение
EMBARCADERO\RAD STUDIO
Что, и эти товарищи позволяют компилировать с неуказанным размером массива? OMG
Цитата Сообщение от Mitax Посмотреть сообщение
тогда у меня вылазит ошабка следующего вида
Ошибки Ваши, вероятно связаны с чем-то другим.
Вообще, меня уже очень сильно смущают все эти устаревшие заголовочные файлы:
Цитата Сообщение от Mitax Посмотреть сообщение
C++
1
2
3
4
5
6
7
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#include <fstream.h>
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:39  [ТС]     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Ошибки Ваши, вероятно связаны с чем-то другим.
Вообще, меня уже очень сильно смущают все эти устаревшие заголовочные файлы:
прошу прощения за грамматические ошибки...
в таком случае какие "заголовочные файлы" вы предлагаете мне использовать?
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
21.05.2013, 11:40     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #8
Mitax, попробуйте на тупую
C++
1
st[m].fam = new char;
И, когда не поможет, прислушайтесь к совету Croessmah, - в седьмой рад студии нету String-а?
или есть
C++
1
#include <string.h>
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:47  [ТС]     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #9
на "тупую" та же проблема, что и с подстановкой значения, а #include <string.h> у меня прописан
SatanaXIII
Супер-модератор
Эксперт С++
5603 / 2637 / 242
Регистрация: 01.11.2011
Сообщений: 6,497
Завершенные тесты: 1
21.05.2013, 12:04     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #10
Цитата Сообщение от Mitax Посмотреть сообщение
а #include <string.h> у меня прописан
Ну и используйте ее!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <string.h>
typedef struct TStud //основная структура
{
string fam; //фамилия
} Stud;
 
void addStud(Stud *st, int m) //функция добавления студента
{
cin >> st[m].fam;
}
 
int main()
{
Stud stud[30];
addStud(stud, 1);
return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2013, 12:16     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[];
Еще ссылки по теме:
C++ Неправильно выделяется память для массива
Как выделяется память под массив string? C++
Объясните как выделяется память под умные указатели C++
C++ Каким образом выделяется память при инициализации строковой константой указателя
C++ Как выделяется память на стеке и на куче? Когда нужна ручная очистка?

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 12:16     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; #11
Цитата Сообщение от Mitax Посмотреть сообщение
в таком случае какие "заголовочные файлы" вы предлагаете мне использовать?
Те, которые относятся к С++, идут просто без расширения:
C++
1
<iostream> // вместо <iostream.h>
Для тех, которые относятся к C, добавляется префикс "c" и тоже убирается расширение:
C++
1
<cstdio> // вместо <stdio.h>
По сути, конечно, это те же самые файлы, но с учетом пространства имен std. Использовать их предпочтительнее.

Добавлено через 5 минут
Цитата Сообщение от Mitax Посмотреть сообщение
#include <string.h> у меня прописан
для использования std::string нужно:
C++
1
#include <string>
Потому что string.h (cstring) это для сишных строк, а не для std::
Yandex
Объявления
21.05.2013, 12:16     Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[];
Ответ Создать тему
Опции темы

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