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

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

Войти
Регистрация
Восстановить пароль
 
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
#1

С new первые 2 элемента массива заполняются мусором. - C++

16.02.2012, 20:38. Просмотров 537. Ответов 9
Метки нет (Все метки)

Написал маленькую программу в которую вводиш текст а потом она тебе снова этот текст выдаёт, но только с использованием динамического массива(с помощю new). Программа вроде работает правильно, но при выводе первым выводит 2 символа мусора. Почему?

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
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
  char massiv[0];
  int schet,schet2 = 0;
 
  for(;;schet++){
   cin>>massiv[schet];
  
    if(massiv[schet]!='@')
    
      {int *massiv = new int[schet];}
      
      else{break;}}
  
   for(;schet2<=schet;schet2++){
   cout<<massiv[schet2];}
   cout<<endl;
  
  system("PAUSE");
    
  return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 20:38     С new первые 2 элемента массива заполняются мусором.
Посмотрите здесь:

C++ Из массива А(n) (n<=15) напечатать первые три отрицательных элемента
C++ Матрица заполняется мусором, а нужно нулями. (с++)
с++ , удалить первые 5 элементов из контейнера, звтем добавить в конец 3 новых элемента, доработка C++
C++ Переставить первые М-элементов в конец массива
C++ Как удалить первые три элемента в std::vector?
C++ Инициализация объекта нулями или мусором
Первые цифры массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 21:32     С new первые 2 элемента массива заполняются мусором. #2
cactus09, Честно, удивляюсь как она у тебя "вроде работает правильно" У меня на неё компилятор ругается сразу на первой строчке:
C++
1
char massiv[0];
Тут ты объявляешь массив нулевого размера. Используй указатель на массив.
Потом ещё переменная schet у тебя не инициализирована, но в цикле ты её плюсуешь.
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 21:51  [ТС]     С new первые 2 элемента массива заполняются мусором. #3
soundtrack, Я пользуюсь Dev-C+ и компилятор молчит как партизан. Пременная schet инициирована в 9-ой строке (int schet,schet2 = 0; ). А массив спокойно сушествует и при 0-вом кол-во элементов и указателем на него пользуюсь в 16-ой строке. Как так получается что все работает да еще так странно я и сам не знаю?
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,108
16.02.2012, 21:55     С new первые 2 элемента массива заполняются мусором. #4
Цитата Сообщение от cactus09 Посмотреть сообщение
C++
1
{int *massiv = new int[schet];}
Указатель существует только внутри этого блока. Ну и массив нулевой длинны таки муть и уж всяко нельзя писать ни в один его элемент(в том числе нулевой).
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 21:57     С new первые 2 элемента массива заполняются мусором. #5
Ну ты попросил помощи - я просто указываю на ошибки, которые вижу Твоё дело прислушиваться к советам или нет
В 9й строке schet объявлена, но не инициализирована. Инициализирована нулём переменная schet2.

Сделай так:
C++
1
int schet=0, schet2 = 0;
Вместо
C++
1
char massiv[0];
объяви указатель на char
C++
1
char* massiv;
а потом уже после условий своих динамически добавляй массив
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 21:59     С new первые 2 элемента массива заполняются мусором. #6
schet не инициализировано
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 22:11  [ТС]     С new первые 2 элемента массива заполняются мусором. #7
Я в этом деле новичок, так что сильно не ругайте . Что косательно schet то она то как раз иниациализирована(там в сторчке иниациализировано сразу 2 переменные со значением 0). При написании char* massiv; выдает ошибку 14 "ISO C++ forbids comparison between pointer and integer". И кстати я вспомнил массив у меня содержит не 0 элементов а 1 т.к. счет в С++ ведется с 0.

Добавлено через 3 минуты
soundtrack, Упс, сорри. переделал срочку int schet= 0,schet2 = 0; и все зароботоло.
Только интересно как он плюсовал переменную если в ней был мусор?
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 22:14     С new первые 2 элемента массива заполняются мусором. #8
Вот потому что новичок, мы и рассказываем
В строчке инициализирована только schet2. В С++ нужно после каждой переменной после знака "=" установить значение. Сделай так как я написал раньше.
На счет массивов - ты опять же не прав. Индексация идёт с нуля, но при объявлении ты указываешь количество. Поэтому ты делаешь чтото вроде "сделайте мне массив размером ноль"
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 22:18  [ТС]     С new первые 2 элемента массива заполняются мусором. #9
soundtrack, Но как-то же программа работает и с массивом 0, а вот с -1 нет (проверенно ), причем работает без каких либо ошибок?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 22:24     С new первые 2 элемента массива заполняются мусором.
Еще ссылки по теме:

Определить номера минимального элемента массива и элемента, являющегося минимальным без учета этого элемента. C++
C++ Отсортировать первые 10 чисел массива по убыванию
Не заполняются массивы в функции C++
Не заполняются элементы структуры в функции C++
C++ Переставить первые М-элементов в конец массива

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

Или воспользуйтесь поиском по форуму:
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 22:24     С new первые 2 элемента массива заполняются мусором. #10
cactus09, ну возможно это какие-то заморочки конкретно твоего компилятора, то что он пропускает такие ошибки - я не знаю, с ним не работал. Но это в корне неправильно, забудь о таком объявлении. В любой другой среде тебе вылезет сообщение об ошибке.

А вообще интересный компилятор: разрешает использовать переменные без значений, массивы без размера...)
Yandex
Объявления
16.02.2012, 22:24     С new первые 2 элемента массива заполняются мусором.
Ответ Создать тему
Опции темы

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