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

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

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

Есть динамический массив с размерностью 5, необходимо его сделать с размерностью 6, заполнить цифрами и вывести на экран - C++

27.03.2014, 18:16. Просмотров 660. Ответов 18
Метки нет (Все метки)

День добрый.
Не хочется никому морочить голову дурацкими вопросами, поэтому стараюсь находить на все свои вопросы ответы сам. Но тут я столкнулся с совершенно непонятной для меня проблемой и решение ее нигде не могу найти. Когда я запускаю выполнение программы на экран выводится полная ерунда , но если запустить отладчик все нормально и на экран выводятся данные динамического массива. Из-за чего такое может происходить? Голову ломаю второй день. Задача следующая - есть динамический массив с размерностью 5, необходимо его сделать с размерностью 6, заполнить цифрами и вывести на экран. Код, который внизу, при запуске отладчика все отлично выводит на экран, а при запуске программы выводить ерунду. Буду очень благодарен если кто-то натолкнет на решение проблемы. Пользуюсь стандартным инструментарием microsoft visual studio 2010
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
#include <iostream>
#include <stdlib.h>
using namespace std;
void masplus(float*, int*);
void main ()
{   
    int size=5;
        float* mas1;
    mas1 = new float[size];
        
    masplus(mas1, &size);
    
    for(int i=0;i<size; i++)
         cout<<mas1[i];
}
 
void masplus(float* mas, int *n)
{
    delete [] mas;
    *n+=1;
    mas = new float[*n];
    for(int i=0;i<*n; i++)
        mas[i]=i;
 
}
P.S.
Если просто заполнить массив данными , то все ОК и в отладчике и в запуске программы, если сделать как в коде вверху, то в отладчике ОК , а при запуске программы нет.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 18:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть динамический массив с размерностью 5, необходимо его сделать с размерностью 6, заполнить цифрами и вывести на экран (C++):

Создать и вывести на экран двумерный массив целых чисел размерностью 3х3 - C++
1. создать и вывести на экран двумерный массив целых чисел размерностью 3х3 2. создать и вывести на экран двумерный массив вещественных...

Как создать динамический массив размерностью m на n? - C++
подскажите, а то я только n на n создавать умею)

Сформировать динамический двумерный массив, заполнить его случайными числа-ми и вывести на экран монитора. Добавить строку в начало матрицы - C++
Помогите на завтра сделать лабу 2.Сформировать динамический двумерный массив, заполнить его случайными числа-ми и вывести на экран...

Заполнить массив размерностью 6x6 по правилу - C++
Заполнить массив размерностью 6x6 по правилу 1 2 3 4 5 6 2 3 4 5 6 1 3 4 5 6 1 2 4 5 6 1 2 3 5 6 1 2 3 4 6 1 2 3 4 5

Массив размерностью 100 заполнить случайными числами - C++
Помогите с заданием,кому не трудно. Массив размерностью 100 заполнить случайными числами, лежащими в диапазоне от –10 до 10. Во всех...

Создать динамический массив, заполнить его и вывести - C++
Задача такая, создать динамический массив, заполнить его и вывести. Набросал код #include &lt;iostream&gt; using namespace std; class...

18
CheburatorUA
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
31.03.2014, 00:23  [ТС] #16
Как-то странно все равно. В моей версии в main проинициализировали указатель, затем под этот указатель выделена память для массива. Указатель передан в функцию, затем по этому указателю память удалена и снова выделена, но на одну ячейку больше. Ну выделена эта память в копии т.е. в функции, но ведь указатель не поменялся и память выделена. Перечитав довольно много литературы я так понял , что указатели именно для таких ситуаций и существуют, а тут оказалось, что необходимо еще дополнительно и ссылку указывать.
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 00:33 #17
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CheburatorUA Посмотреть сообщение
Перечитав довольно много литературы я так понял , что указатели именно для таких ситуаций и существуют
Всё хорошо пока действия в функции, куда передан указатель по значению (копия), осуществляются над данными, адрес которых находится в указателе:
Цитата Сообщение от CheburatorUA Посмотреть сообщение
затем по этому указателю память удалена
Адрес и в копии, и в оригинале (в main()) пока одинаковы, поэтому всё хорошо.
Цитата Сообщение от CheburatorUA Посмотреть сообщение
и снова выделена, но на одну ячейку больше.
Цитата Сообщение от CheburatorUA Посмотреть сообщение
но ведь указатель не поменялся и память выделена.
В том то и дело, что поменялся (поменялся адрес, который хранится в указателе).
При выделении новой памяти, адрес этой памяти записыается в сам указатель, т.е. меняются уже не данные, адрес которых находится в указателе, а сам этот адрес (значение указателя), и меняется он в копии, а не в том указателе, который был в main().
2
DrOffset
7387 / 4464 / 1013
Регистрация: 30.01.2014
Сообщений: 7,317
31.03.2014, 00:49 #18
Цитата Сообщение от CheburatorUA Посмотреть сообщение
еще дополнительно и ссылку указывать.
Ссылку не обязательно. Есть еще вариант с указателем на указатель (float **). Тогда мы будем передавать адрес указателя, который указывает на наши данные. И через этот адрес мы всегда можем получить доступ к тому самому указателю (в нашем случае он будет находиться в main), указывающему на наши данные. Я всегда тем, кто плохо понимает всю эту кухню, рисую схемы на доске. Но здесь не получится, так что попробуй понять, что написали alsav22 и я.
2
CheburatorUA
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
31.03.2014, 13:37  [ТС] #19
Спасибо за пояснения. Теперь я понял. А то я не мог сам понять, меня как заклинило на этом указателе.
0
31.03.2014, 13:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 13:37
Привет! Вот еще темы с ответами:

Дан двухмерный массив размерностью NхМ, превратить его в одномерный. - C++
Дан двухмерный массив размерностью NхМ, превратить его в одномерный. Зарание спасибо!!!;););)

Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать - C++
1. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать. 2. Добавить элемент в конец массива...

Сформировать динамический двумерный массив, заполнить его случайными числами и вывести на печать - C++
Все привет!Прошу помочь,на примере этой задачи нужно сформировать динамический двумерный массив, заполнить его случайными числами и вывести...

Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать - C++
Помогите найти ошибку. Сформировать динамический одномерный массив, заполнить его случайными числами и вывести на печать.Удалить элемент...


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

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

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