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

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

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

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

16.02.2012, 20:38. Просмотров 575. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2012, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С new первые 2 элемента массива заполняются мусором. (C++):

Из массива А(n) (n<=15) напечатать первые три отрицательных элемента - C++
Из массива А={3.6,-3.2,9.3,4.2,-2.1,6.3,7.8,-8.9}; (n&lt;=15) напечатать первые три отрицательных элемента

Определить номера минимального элемента массива и элемента, являющегося минимальным без учета этого элемента. - C++
Дан массив. Определить номера минимального элемента массива и элемента, являющегося мини-мальным без учета этого элемента.

Найти сумму первого максимального элемента массива А и последнего минимального элемента массива В - C++
Вот задание : Даны целочисленные массивы А и В. Найти сумму первого максимального элемента массива А и последнего минимального элемента...

15% отличаются от среднего арифметического максимального элемента массива А и минимального элемента массива В - C++
Помогите написать программу, которая в массив C записывает те элементы массивов A (размерности n) и B (размерности m), которые не более чем...

Как удалить первые три элемента в std::vector? - C++
Добрый вечер! у меня есть вектор vector&lt;MyClass&gt; v; где MyClass - какой-либо мой класс, допустим вектор заполнен на 6 ячеек. Как...

с++ , удалить первые 5 элементов из контейнера, звтем добавить в конец 3 новых элемента, доработка - C++
Пожалуйста помогите доработать код. //--------------------------------------------------------------------------- #include...

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

Сделай так:
C++
1
int schet=0, schet2 = 0;
Вместо
C++
1
char massiv[0];
объяви указатель на char
C++
1
char* massiv;
а потом уже после условий своих динамически добавляй массив
1
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
16.02.2012, 21:59 #6
schet не инициализировано
0
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 22:11  [ТС] #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; и все зароботоло.
Только интересно как он плюсовал переменную если в ней был мусор?
0
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 22:14 #8
Вот потому что новичок, мы и рассказываем
В строчке инициализирована только schet2. В С++ нужно после каждой переменной после знака "=" установить значение. Сделай так как я написал раньше.
На счет массивов - ты опять же не прав. Индексация идёт с нуля, но при объявлении ты указываешь количество. Поэтому ты делаешь чтото вроде "сделайте мне массив размером ноль"
1
cactus09
Чайник
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
16.02.2012, 22:18  [ТС] #9
soundtrack, Но как-то же программа работает и с массивом 0, а вот с -1 нет (проверенно ), причем работает без каких либо ошибок?
0
soundtrack
42 / 42 / 4
Регистрация: 15.12.2011
Сообщений: 131
16.02.2012, 22:24 #10
cactus09, ну возможно это какие-то заморочки конкретно твоего компилятора, то что он пропускает такие ошибки - я не знаю, с ним не работал. Но это в корне неправильно, забудь о таком объявлении. В любой другой среде тебе вылезет сообщение об ошибке.

А вообще интересный компилятор: разрешает использовать переменные без значений, массивы без размера...)
1
16.02.2012, 22:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2012, 22:24
Привет! Вот еще темы с ответами:

Матрица заполняется мусором, а нужно нулями. (с++) - C++
Пока наброски, даже без отчистки памяти, но уже на этом этапе не работает не правильно . В итоге работы выходит нужный нам массив, но...

Инициализация объекта нулями или мусором - C++
Здравствуйте. Я бы воспользовался поиском, но даже не знаю, как ему сформулировать вопрос. Допустим, есть какой-то класс с...

Первые цифры массива - C++
Задача - найти первые цифры ВСЕХ чисел массива! Дан массив int a = {101, 212, 353, 892, 899} Должно вывести - 1, 2, 3, 8, 8 Как...

Не заполняются массивы в функции - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; using namespace std; int s=100;//size int x;//max int n;//min int...


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

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

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