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

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

Войти
Регистрация
Восстановить пароль
 
 
KostyaKulakov
Заблокирован
#1

почему не работает? - C++

24.08.2012, 10:35. Просмотров 639. Ответов 19
Метки нет (Все метки)

решил по практиковаться с выделением динамической памяти:
почему не работает код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for(int i=0; i < size; i++)
        a[i] = i;
 
    for (int i =0; *a != '\0'; i++)
        cout << a[i] << endl;
 
    delete[] a;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2012, 10:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос почему не работает? (C++):

Почему выводится в виде таблицы и почему не работает сортировка - C++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает - C++
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею в ввиду что сделал прогу которая меняет...

Почему не работает cin.clear() и как работает sync()? - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; char*input(char*ch,int&amp;n){ cin.getline(ch,20); //cin.sync(); ...

Почему в библиотеке не работает то, что спокойно работает в программе? - C++
День всем добрый! Я здесь решил собрать библиотеку для конструктора игр Game Maker. Хотел поэкспериментировать. Как всегда, у...

Не могу понять почему не работает (или правильно не работает) - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Почему в динамическом массиве не работает то, что работает со статическим? - C++
Программа зависает #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; using namespace std; int main() { ...

19
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.08.2012, 10:40 #2
C++
1
for (int i =0; *a != '\0'; i++)
Круто. Если у тебя в цикле меняется i, то почему ты условие выхода проверяешь по *a? И почему, если у тебя это целые числа, ты сравниваешь с каким-то символом?
1
KostyaKulakov
Заблокирован
24.08.2012, 10:52  [ТС] #3
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
for (int i =0; *a != '\0'; i++)
Круто. Если у тебя в цикле меняется i, то почему ты условие выхода проверяешь по *a? И почему, если у тебя это целые числа, ты сравниваешь с каким-то символом?
и в правду я ошибся. спасибо. я хотел пробежать цикл до конца массива A
0
Vourhey
Почетный модератор
6485 / 2259 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
24.08.2012, 10:53 #4
Массив не С-строка. У него нет нулевого символа в конце.
1
KostyaKulakov
Заблокирован
24.08.2012, 10:54  [ТС] #5
а как должна запись выглядить, чтобы получилось так как хочу?
0
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 10:54 #6
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
решил по практиковаться с выделением динамической памяти:
почему не работает код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for(int i=0; i < size; i++)
        a[i] = i;
 
    for (int i =0; *a != '\0'; i++)
        cout << a[i] << endl;
 
    delete[] a;
}
Хотел сделать видимо поинтересней а получилось как всегда.)) У тебя не строка символов, а массив целочисленный, так что eof не сработает.) самым простым будет поменять на size.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 #include <conio.h>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for(int i=0; i < size; i++)
        a[i] = i;
 
    for (int i =0; i<size; i++)
        cout << a[i] << endl;
        getche();
    delete[] a;
}
И если я не ошибаюсь нет смысла удалять в главной функции указатели, ведь они и так удалятся. Delete нужна если у тебя много функций в которых создаются указатели, но потом они в главной программе не нужны - вот и освобождается память.
1
KostyaKulakov
Заблокирован
24.08.2012, 10:56  [ТС] #7
Цитата Сообщение от Bomg Посмотреть сообщение
Хотел сделать видимо поинтересней а получилось как всегда.)) У тебя не строка символов, а массив целочисленный, так что eof не сработает.) самым простым будет поменять на size.
спасибо большое. те проверку делать на size. i < size?
0
ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
24.08.2012, 10:57 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    int size;
    cin >> size;
 
    int *a = new int[size];
 
    for(int i=0; i < size; i++)
        a[i] = i;
 
    for (int i=0; i < size; i++)
        cout << a[i] << " " << &a[i] << endl;
 
    delete[] a;
    system("pause");
    return 0;
}

Выводит значение и адрес, в котором оно хранится.
0
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 11:02 #9
Цитата Сообщение от KostyaKulakov Посмотреть сообщение
спасибо большое. те проверку делать на size. i < size?
да, если будет желание попрактикуйся еще с двойным указателем и там будет как раз поинтересней поглядеть адреса реальные в оперативной памяти.
0
KostyaKulakov
Заблокирован
24.08.2012, 11:02  [ТС] #10
всем спасибо.
0
ProgrC
9 / 9 / 1
Регистрация: 17.08.2012
Сообщений: 43
24.08.2012, 11:03 #11
Цитата Сообщение от Bomg Посмотреть сообщение
нет смысла удалять в главной функции указатели, ведь они и так удалятся. Delete нужна если у тебя много функций в которых создаются указатели, но потом они в главной программе не нужны - вот и освобождается память.
Перестраховка никогда не повредит... =)
0
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 11:04 #12
Цитата Сообщение от ProgrC Посмотреть сообщение
Перестраховка никогда не повредит... =)
То же верно, но это лишь для наглядности.)
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.08.2012, 11:05 #13
Bomg, Нет уж, лучше всегда действовать как действуете всегда (очищать память, если она была выделена).
0
Bomg
2 / 2 / 0
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 11:12 #14
Цитата Сообщение от ForEveR Посмотреть сообщение
Bomg, Нет уж, лучше всегда действовать как действуете всегда (очищать память, если она была выделена).
Но разве в его примере по завершению главной функции программа сама не очищает память?
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
24.08.2012, 11:30 #15
Bomg, Очищает, но очищать память, если выделили является очень полезной и хорошей привычкой.
0
24.08.2012, 11:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2012, 11:30
Привет! Вот еще темы с ответами:

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? - C++
Есть такая функция: void Array::SetStartIndexes(sz3_Arr_t *array) { start_index.reserve(array-&gt;size()); ...

Работает в Borland Developer Studio 2006 но не работает в Visual Studio 2008, почему? - C++
Вводим строку и меняем в ней первый и последний символы. Всё хорошо в Borland Developer Studio, а Visual Studio 2008 пишет, что проэкт...

Почему не работает? - C++
Почему не работет программа? #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;ctime&gt; #define N 10 ...

Почему не работает - C++
Если по отдельности запускать — fin() и fout() они работают. int main() { fout(); system(&quot;pause&quot;); return 0; }


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

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

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