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

Как происходит процесс выделения памяти в стеке и куче - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Интерационные циклы (найти ошибку) http://www.cyberforum.ru/cpp-beginners/thread1073045.html
Скажите, пожалуйста, где я допустила ошибку? #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <cmath> using namespace std;
C++ Деструктор абстрактного класса Почему деструктор абстрактного класса нужно делать виртуальным? http://www.cyberforum.ru/cpp-beginners/thread1073037.html
Матрица. Все элементы последней строки уменьшить на соответствующие элементы третьего столбца C++
В первом модуле определена квадратная матрица 4-ого порядка. Выводится из изменная матрица построчно. Во втором модуле все элементы последней строки уменьшаются на соответствующие элементы третьего столбца.
Изменить программу C++
сабж для приаттаченной задачи по аналогии с кодом ниже, вроде просто, но не получается, прошу помощи :) #include "stdafx.h" #include <Iostream> #include <math.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); float x, a, b;
C++ C++ упорядочены ли числа последовательности по убыванию http://www.cyberforum.ru/cpp-beginners/thread1073011.html
вот сама задача: Даны натуральные числа A1, A2, ... . Признак конца последовательности 0. Определить упорядочены ли числа последовательности по убыванию и вот,как я её решил,но думаю,что не правильно - пожалуйста,проверьте: #include <stdio.h> #include <math.h> main() { int n; /* количество чисел */
C++ Не работает проверка и сдвиг строки матрицы помогите разобраться. не работает проверка и сдвиг строки. не могу найти ошибку. #include<iostream> #include<iomanip> using namespace std; подробнее

Показать сообщение отдельно
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
16.01.2014, 14:46     Как происходит процесс выделения памяти в стеке и куче
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
89
90
91
92
93
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include "disc.h"
void main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  
  Disc d1,d2[2];
  Disc *d3,*d4;
  d3=new Disc;
  int kol=0,n;
  clrscr();
  kol++;
  printf("%i)",kol);
  printf("\nВведите название дисциплины -> ");
  gets(d1.namedisc);
  printf("Введите имя перподавателя -> ");
  gets(d1.teacher_name);
  printf("Введите название группы -> ");
  gets(d1.name_group);
  printf("Введите кол-во часов на изуч. дисциплины-> ");
  scanf("%i",&d1.hours);
  fflush(stdin);
  
  for (int i=0; i<1; i++)
  {
    clrscr();
    kol++;
    printf("%i)",kol);
    printf("\nВведите название дисциплины -> ");
    gets(d2[i].namedisc);
    printf("Введите имя перподавателя -> ");
    gets(d2[i].teacher_name);
    printf("Введите название группы -> ");
    gets(d2[i].name_group);
    printf("Введите кол-во часов на изуч. дисциплины-> ");
    scanf("%i",&d2[i].hours);
    fflush(stdin);
  }
 
  clrscr();
  kol++;
  printf("%i)",kol);
  printf("\nВведите название дисциплины -> ");
  gets(d3->namedisc);
  printf("Введите имя перподавателя -> ");
  gets(d3->teacher_name);
  printf("Введите название группы -> ");
  gets(d3->name_group);
  printf("Введите кол-во часов на изуч. дисциплины-> ");
  scanf("%i",&d3->hours);
  fflush(stdin);
 
  printf ("\n Введите кол-во записей-> ");
  scanf ("%i",&n);
  d4=new Disc [n];
  fflush(stdin);
  for (int i=0; i<n; i++)
  {
    clrscr();
    kol++;
    printf("%i)",kol);
    printf("\nВведите название дисциплины -> ");
    gets(d4[i].namedisc);
    printf("Введите имя перподавателя -> ");
    gets(d4[i].teacher_name);
    printf("Введите название группы -> ");
    gets(d4[i].name_group);
    printf("Введите кол-во часов на изуч. дисциплины-> ");
    scanf("%i",&d4[i].hours);
    fflush(stdin);
  }
  clrscr();
  kol=0;
  printf("\n------------------------------------------------------------");
  printf("\n|№|Название дисциплины |Имя преподавателя   |Имя группы|Час|");
  printf("\n------------------------------------------------------------");
  kol++;
  printf("\n|%1i|%20s|%20s|%10s|%3i|",kol,d1.namedisc,d1.teacher_name,d1.name_group,d1.hours);
  for (int i=0; i<1; i++)
    printf("\n|%1i|%20s|%20s|%10s|%3i|",kol+i+1,d2[i].namedisc,d2[i].teacher_name,d2[i].name_group,d2[i].hours);
  kol+=3;
   printf("\n|%1i|%20s|%20s|%10s|%3i|",kol,d3->namedisc,d3->teacher_name,d3->name_group,d3->hours);
  for (int i=0; i<n; i++)
    printf("\n|%1i|%20s|%20s|%10s|%3i|",kol+i+1,d4[i].namedisc,d4[i].teacher_name,d4[i].name_group,d4[i].hours);
  kol+=2;  
  printf("\n------------------------------------------------------------");
  getch();
  delete d3;
  delete []d4;
}
C++
1
2
3
4
5
6
7
8
class Disc
{
  public:
  char namedisc[20];
  char teacher_name[20];
  char name_group[10];
  int hours;
};
Тут я просто вывожу в табличке свой класс, просто 4 способами, через переменную, массив, указатель и дин.массив. Вопрос вот выделении памяти под объекты класса (d1,d2[i],*d3,*d4);
писал sizeof для каждого объекта и получил что
d1=56 байта (тут вроде 3 chara 20+20+10+ 1 int=4 байтам=54 байта, куда выделяются еще 2 байта?)
d2=112 байта (ну тут понятно, что записей в массиве 2, 56+56=112)
d3=4 байта (тут 4 байта при записи sizeof(d3)-т.е. на каждое поле класса, их всего 4 выделяется по 1 байту?)
(а если написать sizeof(*d3) то будет снова 56 байт
d4=4 байта (тут аналогично)
Объясните пожалуйста, как происходит процесс выделения памяти в стеке и куче, ну и про кол-во байтов на объекты класса.
Все это делаю в C++ Builder 6
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru