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

Как и почему работает код? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Расположение canvas элементов по окружности http://www.cyberforum.ru/cpp-beginners/thread1210445.html
Всем привет. Пишу небольшую программку на c++ (под rad studio). Вроде с математикой проблем нет, но не могу разобраться. Имеется определенное количество canvas->ellipse (от 2 до 10) и в зависимости...
C++ Откуда качать C++? Привет всем, кодеры! Я начинающий программист (в плане С), раннее занимался только Basic-ами, да, и что греха таить - до сих пор программирую в них. Но я думаю, что для того чтобы продвинуться... http://www.cyberforum.ru/cpp-beginners/thread1210439.html
C++ В текстовом файле заменить все строки, начинающиеся с буквы ‘f’ на строки, начинающиеся с буквы ‘a’
8. В текстовом файле заменить все строки, начинающиеся с буквы ‘f’ на строки, начинающиеся с буквы ‘a’.
В файле содержатся даты типа Date C++
7. struct Date {сhar Month;int Day;} В файле содержатся даты типа Date. Заменить все даты, у которых поле Month равно “Май”,”Июнь” или ”Июль” на даты, у которых поле Day не меняется а поле Month...
C++ Добавить порядковый номер в каждую строку текстового файла http://www.cyberforum.ru/cpp-beginners/thread1210402.html
6. Добавить порядковый номер в каждую строку текстового файла.
C++ Удалить из текстового файла все четные строки 5.Удалить из текстового файла все четные строки. подробнее

Показать сообщение отдельно
Алексей_x86
1 / 1 / 0
Регистрация: 17.01.2013
Сообщений: 21
17.06.2014, 15:04  [ТС]
Эх.. Случайно нажал на что-то на клавиатуре и отправил незаконченный пост, а редактировать не могу. Извиняюсь.

Вопрос по следующему коду.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct sA{
    char* val;
    sA(){
        val = nullptr;
    }
    sA(char* nV){
        val = nV;
    }
};
 
sA arr[2];
 
void init()
{
    arr[0] = sA("10101010");
    arr[1] = sA("1110010");
}
 
int main(){
    init();
    cout << arr[0].val << endl<< arr[1].val;
    
}
Я не могу понять почему работает код, отсюда вывод что я не понимаю некоторые механизмы работы С.
Я рассуждал так :
при инициализации массива структур в init(), в конструкторе в качестве аргумента типа char* я указываю строковую константу. Но сама же эта константа хранится в локальной памяти выделенной для функции, и после выхода из init() указатели char* всех структур в массиве arr будут указывают на участки памяти, в которых уже другие данные (т.к. после выхода из функции освобождается память ее локальных переменных).
Раз код работает, значит либо С скопировал строковую константу в другую область памяти (которая не удаляется при выходе из init()) и поместил указатель на нее в поле val, либо ячейки памяти, в которых находится локальные переменные функции init() были освобождены, но их значения не были стерты, поэтому я получаю правильный результат в cout (но это опасно, т.к. эти ячейки могут быть спокойно перезаписаны).
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru