192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
1

Что означает этот код?

09.04.2017, 20:14. Показов 856. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пример из книги Герберт Шилдт. После строчки "инициализация объекта строка" там идёт вот эта строчка
C++
1
p = (char *) malloc(size);
Что она означает? malloc я знаю это выделение памяти а вот что значит p = (char *)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 20:14
Ответы с готовыми решениями:

Что означает этот код
void inline static Compare(Shape const* const s1, Shape const* const s2), что здесь означает...

Что означает этот код?
int SIMPLE(int a) { int i; if(a==2){ return 1; } if(a==0 || a==1 || a%2==0){...

Что означает этот warning?
warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x Появляется...

что означает этот синтаксис?
Добрый день! в книге Бьерна Страуструпа встретил такой код enum token_valut {NAME, NUMBER, END,...

18
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
09.04.2017, 20:20 2
Описание malloc() посмотри. Древняя функция, возвращающая void*. Поэтому тип всегда приводят.
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
09.04.2017, 20:24 3
malloc выделяет "сырую" память (*void) размера size. Эту помять приводят к char*
1
Почетный модератор
Эксперт по компьютерным сетямЭксперт Windows
28045 / 15778 / 982
Регистрация: 15.09.2009
Сообщений: 67,752
Записей в блоге: 78
09.04.2017, 20:24 4
код в виде текста в студию.
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
09.04.2017, 20:25 5
в каком-то смысле аналогично
C++
1
char *p=new char[size];
1
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
09.04.2017, 20:31 6
Цитата Сообщение от no swear Посмотреть сообщение
означает
https://ru.wikipedia.org/wiki/... 0%BF%D0%B0
В чистом Си, кстати, можно не приводить. Void* приведется сам к чему угодно.
А вот в C++ более строгий контроль типов, нужно приводить.
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
09.04.2017, 20:36  [ТС] 7
Вот кусок кода
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
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
 
#define SIZE 255
 
class strtype {
    
    char *p;
    int len;
 
public:
    strtype(); // конструктор
    ~strtype(); // деструктор
    void set(char *ptr);
    void show() ;
};
 
// Инициализация объекта строка
strtype::strtype()
{
    p=(char *) malloc(SIZE);
    
    if ( ! p ) 
    {
        cout « "Ошибка выделения памяти\п";
        exit (1);
    }
    
    p = '\0';
    len = 0;
}
А что означает exit(1), это выход из конструктора? А если написать так exit(0) тогда что будет это означать?
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
09.04.2017, 20:40 8
Цитата Сообщение от no swear Посмотреть сообщение
это выход из конструктора?
Это выход из всей программы. Лучше не используй такое.
1
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
09.04.2017, 20:41 9
Функция exit выполняет немедленное завершение программы. Возвращается значение 0 или EXIT_SUCCESS указывает на успешное завершение программы, и любое другое значение или значение макроса EXIT_FAILURE используется для указания об аварийном завершении программы.
http://cppstudio.com/post/875/
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
09.04.2017, 20:41  [ТС] 10
Цитата Сообщение от nmcf Посмотреть сообщение
Это выход из всей программы. Лучше не используй такое.
А что вместо неё можно использовать?
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
09.04.2017, 21:02 11
Флаг или исключение.
1
-16 / 14 / 3
Регистрация: 22.01.2013
Сообщений: 154
09.04.2017, 21:08 12
p = &p;
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
09.04.2017, 21:11  [ТС] 13
Что-то не пашет. Вылетает наглухо не могу понять в чём проблема
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
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
 
#define SIZE 255
class strtype
{
    char *p;
    int len;
 
public:
    strtype();
    ~strtype();
    void set(char *ptr);
    void show();
};
 
strtype::strtype()
{
    char *p = new char[SIZE];
 
    if(!p)
    {
        cout << "Ошибка выделения памяти\n";
        exit(1);
    }
 
    *p = '\0';
    len = 0;
}
 
strtype::~strtype()
{
    cout << "Освобождение по адресу 'p'\n";
    free(p);
}
 
void strtype::set(char *ptr)
{
    if(strlen(p) > SIZE)
    {
        cout << "Строка слишком велика\n";
        return;
    }
 
    strcpy(p, ptr);
    len = strlen(ptr);
}
 
void strtype::show()
{
    cout << p << " " << len << endl;
}
 
int main()
{
    strtype s1;
 
    s1.set("Мне нравиться C++");
    s1.show();
 
}
уже переписал всё как в книге кроме malloc его я заменил на char *p = new char[SIZE] всё равно не работает
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
09.04.2017, 21:13 14
Если new, то delete.
1
18 / 14 / 4
Регистрация: 02.04.2017
Сообщений: 125
09.04.2017, 21:17 15
что обозначает подобный код:

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
#include <iostream> 
#include <cstdlib> 
 
using namespace std;
 
int** createInt(int m,int n) { 
 
    //int** a = new int*[m]; 
    for (int i = 0; i < m; i++) {
        //a[i] = new int[n]; 
        a[i] = new float[n];
 
    }
 
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            cin >> a[i][j];
        }
    }
 
    return a;
}
 
int main()
{
  int m,n;//m-строка,n-столбец
 
//int** a = createInt(m, n);}
...
...
интересует значение вот такого рода строки ://int** createInt(int m,int n) я понял что это функция а что значат **?
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
09.04.2017, 21:20  [ТС] 16
C++
1
2
3
4
5
strtype::~strtype()
{
    cout << "Освобождение по адресу 'p'\n";
    delete [] p;
}
Что-то не получается
0
7785 / 6553 / 2983
Регистрация: 14.04.2014
Сообщений: 28,621
09.04.2017, 21:27 17

Не по теме:

rayzor48, ты как сюда попал?



Добавлено через 37 секунд
no swear, в 21-й строке ты повторно объявляешь указатель. Убери.
1
70 / 70 / 35
Регистрация: 06.07.2016
Сообщений: 415
09.04.2017, 21:28 18
Цитата Сообщение от no swear Посмотреть сообщение
не получается
Все работает.
Выделаем так :
C++
1
p = new char[SIZE];
Освобождаем вот так :
C++
1
delete [] p;
И не надо делать вот так :
C++
1
2
3
4
5
 if(!p)
    {
        cout << "Ошибка выделения памяти\n";
        exit(1);
    }
Так делают в Си. В С++ если new не выделит память, то вылетит исключение - http://en.cppreference.com/w/c... /bad_alloc
1
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
09.04.2017, 21:32  [ТС] 19
C++
1
2
3
4
5
6
7
strtype::strtype()
{
    p = new char[SIZE];
 
    *p = '\0';
    len = 0;
}
Вот исправил теперь заработало ))

Цитата Сообщение от Notoriously Посмотреть сообщение
Освобождаем вот так :
Ну delete [] p я так и написал
0
09.04.2017, 21:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2017, 21:32
Помогаю со студенческими работами здесь

Вопрос: что означает этот цикл?
Что означает цикл for (int I=0; w; I++); если 1) w – числовой од-номерный массив, 2) w -- строка;...

Что означает двоичный поиск?Как определить позицию, где в этот массив можно вставить число x
помогите решить эту задачу &quot;Элементы массива не убывают. Двоичным поиском определить позицию, где в...

Что означает код?
for (const char &amp; c : str)

Что означает данный код?
map &lt; string, int &gt; w; Я правильно понимаю, что это какой-то способ объявления переменных? Или...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru