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

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

Восстановить пароль Регистрация
 
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 20:38     С new первые 2 элемента массива заполняются мусором. #1
Написал маленькую программу в которую вводиш текст а потом она тебе снова этот текст выдаёт, но только с использованием динамического массива(с помощю 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++ Матрица заполняется мусором, а нужно нулями. (с++)
C++ В программе написать функции: вставки элемента, поиска максимального элемента, определения среднего арифметического элементов массива
После каждого четного элемента массива вставить 2 элемента с тем же значением, полученный массив отсортировать C++
с++ , удалить первые 5 элементов из контейнера, звтем добавить в конец 3 новых элемента, доработка 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
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
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++ Как удалить первые три элемента в std::vector?
Сделать добавление элемента в массив и удаление элемента из массива используя STL 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 элемента массива заполняются мусором.
Ответ Создать тему
Опции темы

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