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

Запись данных в динамический массив через указатели - C++

Восстановить пароль Регистрация
 
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
23.10.2013, 00:58     Запись данных в динамический массив через указатели #1
Здравствуйте!
У меня возникла проблема... Когда я ввожу, например, 10 чисел в дин. массив, цикл while(через который я и хочу организовать ввод в массив) не выходит до тех пор, пока программа не дойдёт до 14-го элемента.
Т.е. вот, мне нужно ввести 10 элементов, однако программа продолжает вводить 11, 12, 13, 14 элементы.
Вот код программы:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "stdafx.h"
#include <stdio.h>
 
int* mas;
int* pointer;
 
int _tmain(int argc, _TCHAR* argv[])
{
    mas=new int[10];
    pointer=&*mas;
 
    while (*pointer)//До тех пор, пока pointer указывает на массив
    {
        *pointer=5;
        pointer++;//Переходим к след. элементу
    }
 
    pointer=&mas[0];
    while (*pointer) printf("%d\n", *pointer++);//Пытаемся вывести на экран. Как бы, выводит всё нормально в данном случае, но, выводится 14 элементов, вместо 10, под которые и было выделено место(new int[10])...
    _gettch();
    return 0;
}

Подскажите пожалуйста, где ошибка...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 00:58     Запись данных в динамический массив через указатели
Посмотрите здесь:

C++ массив через указатели
Запись значения в динамический массив C++
Запись, чтение объектов в файл через указатели. C++
C++ Динамический массив, запись и удаление
C++ Динамический массив и указатели!?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:06     Запись данных в динамический массив через указатели #2
C++
1
while (*pointer)//До тех пор, пока pointer указывает на массив
Почему вы думаете, что за границей массива сразу 0 будет?
Мимино
 Аватар для Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
23.10.2013, 01:09     Запись данных в динамический массив через указатели #3
С чего Вы взяли, что указатель pointer после окончания массива станет нулевым?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:12     Запись данных в динамический массив через указатели #4
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 <stdio.h>
#include <conio.h>
 
int* mas;
int* pointer;
 
int main()
{
    int N = 10;
    mas = new int[N];
    
    pointer = mas;
    for (int i = 0; i < N; ++i)
    {
        *pointer = 5;
        ++pointer; //Переходим к след. элементу
    }
 
    pointer = &mas[0];
    for (int i = 0; i < N; ++i)
        printf("%d\n", *pointer++);
    
    getch();
    return 0;
}
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
23.10.2013, 01:14  [ТС]     Запись данных в динамический массив через указатели #5
alsav22, конечно спасибо, но я бы всё таки хотелось бы узнать, как бы можно было бы это всё сделать именно через while, т.к. если бы я это делал через for-у меня проблем бы не было...
Просто, опять же, for он указывает от и до, а мне нужно так, что бы был указатель сначала на 0-й элемент массива, и цикл выходил тогда, когда ссылки на след. элемент уже не было(т.е. обращение, через while). По идеи-мы выделили 10 элементов под массив, значит, 10 адресов как бы должно быть, и макс. ссылка будет pointer+10. Но, почему то, используются ещё, непонятно от куда взявшиеся 4 элемента...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 01:27     Запись данных в динамический массив через указатели #6
Цитата Сообщение от Jack Wade Посмотреть сообщение
По идеи-мы выделили 10 элементов под массив, значит, 10 адресов как бы должно быть
Адреса в памяти идут непрерывно, и не важно сколько вы выделили. В С++, выход за границу массива, компилятор не отслеживает. Никакого признака окончания выделенной памяти не существует.

Добавлено через 2 минуты
Цитата Сообщение от Jack Wade Посмотреть сообщение
Но, почему то, используются ещё, непонятно от куда взявшиеся 4 элемента...
Может быть четыре, а может быть сорок четыре, пока в памяти не попадётся 0 (или пока программа не рухнет из-за того, что залезет куда не надо в поисках 0).
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
23.10.2013, 01:35     Запись данных в динамический массив через указатели #7
Jack Wade, new [] просто выделяет непрерывный участок памяти и возвращает (типизированный) указатель на его начало; нет никакого "признака конца", '\0' в конце и пр.; что лежит за пределами этого блока тебя интересовать не должно.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.10.2013, 02:40     Запись данных в динамический массив через указатели #8
Цитата Сообщение от Jack Wade Посмотреть сообщение
как бы можно было бы это всё сделать именно через while
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 <stdio.h>
 
int* mas;
int* begin;
int *end;
 
int main()
{
    int N = 10;
    mas = new int[N];
    begin = mas;
    end   = begin + N;
 
    while (begin != end)
    {
        *begin = 5;
        begin++;
    }
 
    begin = mas;
    while (begin != end) printf("%d\n", *begin++);
    
    getchar();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2013, 07:33     Запись данных в динамический массив через указатели
Еще ссылки по теме:

Запись слова в динамический массив C++
Двумерный динамический массив и запись в него C++
C++ Запись структуры данных в файл. Динамический список

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

Или воспользуйтесь поиском по форуму:
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
23.10.2013, 07:33  [ТС]     Запись данных в динамический массив через указатели #9
gray_fox, alsav22, понял! Большое спасибо за пояснение!
Yandex
Объявления
23.10.2013, 07:33     Запись данных в динамический массив через указатели
Ответ Создать тему
Опции темы

Текущее время: 03:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru