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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.90
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
#1

Матрица в динамической памяти - C++

13.09.2008, 18:49. Просмотров 2570. Ответов 22
Метки нет (Все метки)

Здраствуйте,начал проходить динамическую память ,так немогу зделать 2-х мерный массив,помогите пожалуисто разобраться ,ии какие ошибки тут .
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
    int* mas=new int(5,10);
    srand(time(0));
    for (int i=0;i<5;i++)
    {
        for(int j=0;j<10;j++)
        {
        *(mas+i+10+j)=rand()%100;
        cout<<*(mas+i+10+j)<<'\t';
        }
    }
    cout<<'\n';
    delete[]mas;
}
если можно объяснить обычным кодом без библиотек
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 19:24     Матрица в динамической памяти #2
хм. Ну я бы на твоем месте задумался, почему удаляю я используя квадратные скобки, а создаю с круглыми...
Код
   int* mas = new int[5,10];
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.09.2008, 19:59     Матрица в динамической памяти #3
Код
int* mas = new int[5,10];
А не возрощает ли оператор new массив размерностью в 10, так как операция "," возрощает самый крайний правый операнд.

И по-моему он обращается за пределы памяти.
Код
*(mas+i+10+j)=rand()%100;
но если так:

Цитата Сообщение от Vourhey Посмотреть сообщение
Если не нравится, то можешь заменить. Например так:
Код
int *mas = new int[50];
то правильно.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 20:20     Матрица в динамической памяти #4
Если не нравится, то можешь заменить. Например так:
Код
int *mas = new int[50];
Добавлено через 11 минут 50 секунд
У тебя обращается, у меня - нет
За границы памяти чего? В этой проге больше ничего нет. Поэтому в таких прогах, я могу вообще под один элемент выделить, а работать с массивом. хоть с четырехмерным.

P. S. тихо ты, дай человеку научиться
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.09.2008, 20:25     Матрица в динамической памяти #5
Цитата Сообщение от Vourhey Посмотреть сообщение
P. S. тихо ты, дай человеку научиться
OK, молчу!!!
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 20:30     Матрица в динамической памяти #6
Вот как только он добавит какие-нибудь данные, они закораптятся, тогда он уже сам будет приходить к выводу, "а почему так". А это главное...
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
13.09.2008, 23:20  [ТС]     Матрица в динамической памяти #7
Код
const int a=5;
	const int b=10;
	int* mas=new int[a+b];
если так то выскакивает дебагер почему ??
или надо делать еще одну переменную для сложения а+b???

Добавлено через 3 минуты 4 секунды
кстати заметил что если уменьшить значения
Код
int *mas = new int[20];
а остольно оставить как есть выскакивает тоже деббагер ,почему так ???и почему при таком объявлении я могу писать разные кол-во строк или столбцов и приэтом ошибок нету ??
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
13.09.2008, 23:36     Матрица в динамической памяти #8
Должно все нормально работать. С какой ошибкой дебагер выскакивает? В какой строке?
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
14.09.2008, 01:17  [ТС]     Матрица в динамической памяти #9
появляеться табличка Visual Studio Just-in-Time Debbager

и надо нажать Yes or No
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2008, 08:16     Матрица в динамической памяти #10
Выполни свою прогу пошагово F10/F11.
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
14.09.2008, 13:23     Матрица в динамической памяти #11
Ничего,если я все-таки влезу?) двумерный массив - это фактически одномерный. Просто интерпретируется как двумерный,а делается это следующим образом :
каждые n элементов одномерного массива интерпретируешь как строку одномерного(первые n -первая строка,вторые n - вторая и т д. Всего строк m.) Теперь пробуй разобраться....
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2008, 13:37     Матрица в динамической памяти #12
Ну ошибка-то не из-за восприятия.
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
14.09.2008, 13:51     Матрица в динамической памяти #13
Ну,из-за чего там ошибка,разбираться неохото,потому что из-за восприятия там написана чушь.
Код
 *(mas +i +10 +j)
Я бы не сказал,что это элемент i-й строки и j-го столбца. Хотя,по логике,кажется,что это имелось ввиду. Кстати,максимальное значение смещения тут 25(5+10+15),а массив вы создали размера 20.Ай-яй-яй.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2008, 14:03     Матрица в динамической памяти #14
Ну то же самое про a =5 b=10
а потом:
new int[a+b], наверное, это имелось ввиду не 15 а 50 (a*b). Но вся эта байда должна работать Так как других данных в проге нет, то можно выделить и под один элемент, а обращаться к 50...

Добавлено через 10 минут 1 секунду
Доброе привидение все никак не скажет, где у него ошибка выскакивает
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
14.09.2008, 14:13     Матрица в динамической памяти #15
Ага,но есть ведь еще отладочный код,который тоже динамическую память хочет,и берет.Если попробовать записать в переменные отладчика,думаю,он возмутится и скажет то,что сказал. К тому же,не лучшая логика "в данном случае программа не взорвется"...))

Цитата Сообщение от Vourhey Посмотреть сообщение
new int[a+b], наверное, это имелось ввиду не 15 а 50 (a*b).
Это мы с тобой понимаем,что это имелось в виду,а он нет.И усиленно молчим,чтобы он сам допер.Кстати,у тебя только что классно получилось скрыть от него,че у него не так
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
14.09.2008, 14:21  [ТС]     Матрица в динамической памяти #16
ну это понятно вроде
это типа for( int n=0;n<m;n++) как я понял по твоему объяснению
и потом указываешь сколько в каждой n должно быть элиментов вот и получаеться 2-х мерный массив.
XuTPbIu_MuHTAu
Эксперт С++
2222 / 737 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
14.09.2008, 14:28     Матрица в динамической памяти #17
Нет. Создаешь массив размером N*M. После этого доступ к элементу [i,j] осуществляется так :
Код
 mas[i+j*N];
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
14.09.2008, 14:28  [ТС]     Матрица в динамической памяти #18
Цитата Сообщение от Vourhey Посмотреть сообщение
Ну то же самое про a =5 b=10
а потом:
new int[a+b], наверное, это имелось ввиду не 15 а 50 (a*b). Но вся эта байда должна работать Так как других данных в проге нет, то можно выделить и под один элемент, а обращаться к 50...
Она у меня ссылалась на *(mas +i +10 +j), ну теперь я знаю почему ,иза моеи не внимательность new int[a+b].да там имелось ввиду 50(жалко что комп не умеет мысли читать )
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
14.09.2008, 14:30     Матрица в динамической памяти #19
Casper!,хых...я тебя не понимаю... У тебя n это же вроде, количество строк. А тут итератор...

Добавлено через 2 минуты 9 секунд
Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
Нет. Создаешь массив размером N*M. После этого доступ к элементу [i,j] осуществляется так :
Код
 mas[i+j*N];
Код
 *(mas+i*m+j)
Если б комп умел читать мысли, программисты бы не нужны были
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2008, 14:45     Матрица в динамической памяти
Еще ссылки по теме:

C++ Выделение динамической памяти
C++ Удаление динамической памяти
C++ Выделение динамической памяти
Удаление new из динамической памяти C++
C++ Освобождение динамической памяти в vs

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

Или воспользуйтесь поиском по форуму:
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
14.09.2008, 14:45  [ТС]     Матрица в динамической памяти #20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main()
{
    const int a=5;
    const int b=10;
    int* mas=new int[a*b];
    srand(time(0));
    for (int i=0;i<a;i++)
    {
        for(int j=0;j<b;j++)
        {
        *(mas+i*b+j)=rand()%100;
        cout<<*(mas+i*b+j)<<'\t';
        }
    }
    cout<<'\n';
    delete[]mas;
}
мм интересно и с *(mas+i+m+j) и с *(mas+i*m+j)работает

*(mas+i*m+j)но чета у меня тока что пролетела мысля что *m+j что это не операцыя умножения а указатель на m.
Yandex
Объявления
14.09.2008, 14:45     Матрица в динамической памяти
Ответ Создать тему
Опции темы

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