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

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

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

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

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

Матрица, выделение динамической памяти - C++
В общем у меня такая проблема: нужно решить задачу двумя способами, сначала без выделения динамической памяти , потом с её выделением ....

Выделение динамической памяти - C++
Чем int *List = new int; delete List; отличается от обычного массива (int List) ? Нет, я понимаю, что создал динамическую...

Переменные в динамической памяти! - C++
подскажите как реализовать такое задание: Разместите в динамической памяти две переменные типа структура, содержащую информацию о...

Распределение динамической памяти! - C++
У нас есть 2 упорядоченных массива. Надо создать 3-ий упорядоченный массив который состоит из первых двух. #include &lt;stdio.h&gt; ...

выделение динамической памяти - C++
помогите пожалуйста , нужно написать функцию для ввода новой матрицы, не получается выделить под него память. класс: mymatrix ::...

Теория по динамической памяти - C++
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь может быть и большим. Может n==1000000? Где запоминается,...

22
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 19:24 #2
хм. Ну я бы на твоем месте задумался, почему удаляю я используя квадратные скобки, а создаю с круглыми...
Код
   int* mas = new int[5,10];
1
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];
то правильно.
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 20:20 #4
Если не нравится, то можешь заменить. Например так:
Код
int *mas = new int[50];
Добавлено через 11 минут 50 секунд
У тебя обращается, у меня - нет
За границы памяти чего? В этой проге больше ничего нет. Поэтому в таких прогах, я могу вообще под один элемент выделить, а работать с массивом. хоть с четырехмерным.

P. S. тихо ты, дай человеку научиться
0
Sined
9 / 7 / 2
Регистрация: 30.08.2008
Сообщений: 120
13.09.2008, 20:25 #5
Цитата Сообщение от Vourhey Посмотреть сообщение
P. S. тихо ты, дай человеку научиться
OK, молчу!!!
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 20:30 #6
Вот как только он добавит какие-нибудь данные, они закораптятся, тогда он уже сам будет приходить к выводу, "а почему так". А это главное...
0
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];
а остольно оставить как есть выскакивает тоже деббагер ,почему так ???и почему при таком объявлении я могу писать разные кол-во строк или столбцов и приэтом ошибок нету ??
0
Vourhey
Почетный модератор
6486 / 2260 / 123
Регистрация: 29.07.2006
Сообщений: 12,536
13.09.2008, 23:36 #8
Должно все нормально работать. С какой ошибкой дебагер выскакивает? В какой строке?
0
Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
14.09.2008, 01:17  [ТС] #9
появляеться табличка Visual Studio Just-in-Time Debbager

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

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

Цитата Сообщение от Vourhey Посмотреть сообщение
new int[a+b], наверное, это имелось ввиду не 15 а 50 (a*b).
Это мы с тобой понимаем,что это имелось в виду,а он нет.И усиленно молчим,чтобы он сам допер.Кстати,у тебя только что классно получилось скрыть от него,че у него не так
0
14.09.2008, 14:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2008, 14:13
Привет! Вот еще темы с ответами:

перераспределение динамической памяти - C++
дан двумерный массив 3х5 выделить динамически память под него, затем перераспределить ее в массив 5х3, затем удалить(выделить и удалить там...

Освобождение динамической памяти - C++
После первого вызова функции(при повторном) пишет ошибку. В функции sort один из элементов массива становится недоступным для чтения. Если...

Переменная в динамической памяти - C++
class SimpleCircle { public: SimpleCircle (); //Basic constructor SimpleCircle (int radius); //Constructor with parameters ...

Удаление динамической памяти - C++
Всем здрасьте. Имеется вот такая структура. struct ModelType { DWORD FVF; IDirect3DVertexBuffer9* vertexBuffer; ...


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

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

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