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

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

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

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

21.05.2013, 03:11. Просмотров 523. Ответов 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;  //сообщение при неверном вводе
        }
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2013, 03:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не выделяется память. выдаёт ошибку на строке st[m].fam = new char[]; (C++):

выдаёт ошибку в составленной программе выдаёт ошибку - C++
Составить программу, которая находит максимальное значение среди элементов линейной таблицы Y, состоящий из N действительных чисел, имеющих...

Не выделяется память - C++
#include&lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; using namespace std; class DynArray { public: int size, end; int...

Выделяется ли память? - C++
Доброе время суток! У меня есть BYTE *pOutData = NULL; Объясните пожалуйста что происходит в следующем: strcpy(cToken, &quot;Задан...

Не выделяется память - C++
Здравствуйте, пытаюсь выделить память, на одном компьютере работает, на другом нет, возвращает 0x00000000, хотя память имеется в наличии. В...

При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так? - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; long Fact(short m)// функция вычисления факториала ...

Не выделяется память в динамической памяти - C++
Подскажите пожалуйста , почему при выполнении operator + (вызов 114 строка) не выделяется память в динамической области ? Получаю...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ITcrusader
Эксперт C++
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
21.05.2013, 05:53 #2
Ну дак может размер укажешь?)
C++
1
st[m].fam = new char[10];
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 08:00 #3
Недавно уже видел такое. Не понятно почему VS разрешает указывать пустые квадратные скобки при выделении памяти. По сути, это эквивалентно [0].
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
21.05.2013, 09:17 #4
используйте классы-обертки, чтобы не возиться с кучей
0
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:20  [ТС] #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
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 11:30 #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>
0
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:39  [ТС] #7
Цитата Сообщение от Tulosba Посмотреть сообщение
Ошибки Ваши, вероятно связаны с чем-то другим.
Вообще, меня уже очень сильно смущают все эти устаревшие заголовочные файлы:
прошу прощения за грамматические ошибки...
в таком случае какие "заголовочные файлы" вы предлагаете мне использовать?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
21.05.2013, 11:40 #8
Mitax, попробуйте на тупую
C++
1
st[m].fam = new char;
И, когда не поможет, прислушайтесь к совету Croessmah, - в седьмой рад студии нету String-а?
или есть
C++
1
#include <string.h>
0
Mitax
0 / 0 / 0
Регистрация: 30.04.2013
Сообщений: 26
21.05.2013, 11:47  [ТС] #9
на "тупую" та же проблема, что и с подстановкой значения, а #include <string.h> у меня прописан
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
21.05.2013, 12:04 #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;
}
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 12:16 #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::
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2013, 12:16
Привет! Вот еще темы с ответами:

Выделяется ли память для ссылки? - C++
Добрый день есть код: char a = 'd'; char *ptr = &amp;a; char &amp;link = a; Вопрос в том, что такое link? Отдельный объект или просто...

Неправильно выделяется память для массива - C++
не правильно выделяется память для массива double *CDispersia_SPMDlg::Function_Spectr(double * _y_noise, int yslovie, double...

На каком этапе выделяется статическая память - C++
Если я создаю синглтон Маейрса: class Singleton { public: static Singleton&amp; Instance() { static Singleton...

Как выделяется память под массив string? - C++
В общем читаю книжку, там объявлены два массива int* p = new int, int* v = new string... бла бла бла ....а потом -&gt; ...После резервирования...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.05.2013, 12:16
Ответ Создать тему
Опции темы

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