Russian Qt Forum

Qt => Общие вопросы => Тема начата: Ubuntu_linux от Апрель 06, 2010, 17:24



Название: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 17:24
Есть масиви u[1000][1000] и E[1000][1000] как можно увеличить количестко строк и столбцов  в  10 раз, а то в Qt не хватает памяти?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: niXman от Апрель 06, 2010, 17:30
Qt тут не при чем. вы пытаетесь выделить память на стеке :)
для подобных целей есть std::vector<>, std::list<>, QVector<>, QList<>
ну и на худой конец, динамическая память.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 17:34
как  увеличить  виделения динамической памяти?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: SimpleSunny от Апрель 06, 2010, 17:45
Использовать new.

Код
C++ (Qt)
int **mtrx;
matr = new int* [nrow];
for (int i = 0; i < nrow; ++i)
   mtrx[i] = new int [ncol];

Удалять в обратном порядке.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: niXman от Апрель 06, 2010, 17:49
SimpleSunny, вот расскажите, нафига такой изврат, когда есть контейнеры? ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Karl-Philipp от Апрель 06, 2010, 18:17
SimpleSunny, вот расскажите, нафига такой изврат, когда есть контейнеры? ;)
Встречал я где-то в Интернете, что контейнеры (vector, list и т.д.) хорошо справляются с количеством объектов до 100.000 штук (ориентировочно).  Дальше, по идее, скорость обработки объектов будет (может) падать.
Возможно, поэтому Ubuntu_linux хочет решить свой вопрос с помощью массивов.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 06, 2010, 18:20
Еще накладных расходов избегаем!


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Karl-Philipp от Апрель 06, 2010, 18:25
Еще накладных расходов избегаем!
переведите, пожалуйста ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Amigo_sa от Апрель 06, 2010, 18:26
Использовать new.

Код
C++ (Qt)
int **mtrx;
matr = new int* [nrow];
for (int i = 0; i < nrow; ++i)
   mtrx[i] = new int [ncol];

Удалять в обратном порядке.


Насколько я понял, для динамических двумерных массивов лучше так не выделять память. new - тяжелая операция и удалять потом объекты трудно. Лучше выделить сразу matr = new int* [nrow * ncol] . и потом аккуратно работать с индексами


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 06, 2010, 18:46
Еще накладных расходов избегаем!
переведите, пожалуйста ;)
Была ситуация, когда хранил двумерный массив Qt-ыми средствами. Размер большой! В рез-те требовалось много оперативки! Стал использовать обычное динамическое выделение памяти - размер занятой оперативки уменьшился значительно! Хотя если размеры небольшие конечно лучше использовать стандартные контейнеры ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: zenden от Апрель 06, 2010, 18:50
лучше купить побольше памяти и не париться  ::) копейки стоит ведь


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Karl-Philipp от Апрель 06, 2010, 19:25
лучше купить побольше памяти и не париться  ::) копейки стоит ведь
а что делать, если программа пишется для продажи? Не говорть же покупателям, что нужно докупать оперативу :)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: pastor от Апрель 06, 2010, 19:33
лучше купить побольше памяти и не париться  ::) копейки стоит ведь

Что делать в случае эмбеддед девайсов?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Vass от Апрель 06, 2010, 19:45
а что делать, если программа пишется для продажи? Не говорть же покупателям, что нужно докупать оперативу :)

Ну не знаю, производители игр и Мелкософт, по-моему, так и делают %)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 19:53
Использовать new.

Код
C++ (Qt)
int **mtrx;
matr = new int* [nrow];
for (int i = 0; i < nrow; ++i)
   mtrx[i] = new int [ncol];

Удалять в обратном порядке.


А как обращаться к елементам масива ? например u[10][1000]?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: umts от Апрель 06, 2010, 20:45
Может, изменить алгоритм на менее требовательный к памяти? В большинстве случаев необходимости в таких огромных массивах нет.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 21:15
Как раз мне надо ,пока что, два массива 1000*1000 (и больше) для более точного решения системы уравнений в частных производных, Но я не могу создать массивы больше 1000*1000 так как стек исчерпывается. :o


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 06, 2010, 21:34
Как раз мне надо ,пока что, два массива 1000*1000 (и больше) для более точного решения системы уравнений в частных производных, Но я не могу создать массивы больше 1000*1000 так как стек исчерпывается. :o
Динамически выделяй память!


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 22:04
Я не могу понять как мне выделить память для 2-мерного массива і как потом к нему обращаться.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: pastor от Апрель 06, 2010, 22:11
Я не могу понять как мне выделить память для 2-мерного массива і как потом к нему обращаться.

В теме уже прозвачало 2 ответа (читай на первой странице)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 22:17
при помощи оператора new , ето я понял, но как мне  узнать (или записать)значения элемента [55][45] ?
Код:
int **mtrx,**matr;
matr = new int* [100];
for (int i = 0; i < 100; ++i){
    mtrx[i] = new int* [ncol];}


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 06, 2010, 22:32
при помощи оператора new , ето я понял, но как мне  узнать (или записать)значения элемента [55][45] ?
Код:
int **mtrx,**matr;
matr = new int* [100];
for (int i = 0; i < 100; ++i){
    mtrx[i] = new int* [ncol];}
Код:
mtrx[55][45]


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 06, 2010, 22:35
Кстати правильно:
Код:
int **mtrx = new int* [100];
for ( int i = 0; i < 100; ++i ) {
    mtrx[i] = new int[ncol];
}


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 06, 2010, 23:17
Все получилось, слава Богу!
Теперь максимальное количество элементов  на два массива 2*(14000*14000) ~4 миллиона элементов. Мне хватит. Спасибо всем! ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Igors от Апрель 07, 2010, 04:20
Насколько я понял, для динамических двумерных массивов лучше так не выделять память. new - тяжелая операция и удалять потом объекты трудно. Лучше выделить сразу matr = new int* [nrow * ncol] . и потом аккуратно работать с индексами
Нет, при хороших размерах нужно выделять как указал SimpleSunny, иначе можно нарваться на отказ new и/или убить скорость. Если надо удалять/вставлять - тогда лучше контейнер, но совсем не каждый здесь подойдет. Я бы делал QList <QVector <int>>





Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 09, 2010, 17:38
Все получилось, слава Богу!
Теперь максимальное количество элементов  на два массива 2*(14000*14000) ~4 миллиона элементов. Мне хватит. Спасибо всем! ;)
Сорри,  тут ошибочка вышла  всего элементов выходит 392 миллиона (~ 400 миллионов) , а если  тип чисел double  (8 байт) то получатся что массив занимает  3.1 Гб памяти.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 09, 2010, 22:07
float не устоит?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: niXman от Апрель 09, 2010, 22:37
Ubuntu_linux, я уверен на 99%, что вашу задачу можно решить правильным способом, без экстремальной потребности в памяти :)
а иначе, как вам раньше уже рекомендовали, купите памяти ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Karl-Philipp от Апрель 10, 2010, 09:07
Ubuntu_linux, я уверен на 99%, что вашу задачу можно решить правильным способом, без экстремальной потребности в памяти :)
а иначе, как вам раньше уже рекомендовали, купите памяти ;)
Уточни-ка, пожалуйста, что это за правльный способ "без экстремальной потребности в памяти"?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: niXman от Апрель 10, 2010, 09:45
т.к. ТС так и не описал алгоритма, требующего такого огромного, одновременно инициализированного кол-ва элементов, точный "прием" решающий его проблему, указать сложно.
но базовое направление, это "Отложенная инициализация".
Тут нашел некоторое, весьма не плохое, решение: http://butaji.wordpress.com/2009/01/02/lazy-computation-in-c-%D0%BB%D0%B5%D0%BD%D0%B8%D0%B2%D1%8B%D0%B5-%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D0%B2-c/

кстати, совсем недавно, для сериализации объектов, инициализируемых данными с ФС(порядка 14 Гб), использовал этот же принцип. доволен как слон :)
при том, этот способ, легко позволяет распаралелить(кластеризовать) алгоритм, для повышения производительности.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: alexman от Апрель 10, 2010, 10:37
Разделяй и властвуй ;D


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 00:58
Вот сделал истчо и так для a[10][10]:

Код
C++ (Qt)
QVector <QVector <double> > a(10,QVector <double>(10));

 Но возникла проблемка!
Когда пишеш это в заголовочном файле, то система ругается.
Цитировать
matrix3diagonal.h:19: error: expected identifier before numeric constant
Как это обойти? :o


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 01:08
Цитировать
Но возникла проблемка!
Когда пишеш это в заголовочном файле, то система ругается.
Цитировать
matrix3diagonal.h:19: error: expected identifier before numeric constant
Как это обойти?
Не писать это в заголовочном файле))

Ну или на худой конец можно так:
static QVector <QVector <double> > a(10,QVector <double>(10));

На сколько я понял, Вы решаете двумерную краевую задачу..
Можно подробней? Алгоритм опишите, плз)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 12:59
Дело в том, что так не получается, если сделать static. Компилятор начинает жаловаться когда во время декларирования появляется "(100). Проблему получилось обойти другим методом, а именно декларируем в matrix3diagonal.h так
Код
C++ (Qt)
QVector <QVector <double>> a;
а затем в matrix3diagonal.cpp в функции matrix3diagonal ()
Код
C++ (Qt)
matrix3diagonal () {
            a.resize (M);
   for (int i = 0; i <M; + + i){
     a [i]. resize (M);}

Также нашел другой метод, но так у меня не получается (уже получаєтся), надо просто удалить  с matrix3diagonal.cpp функцию которая там по дефолту matrix3diagonal () {}
Код
C++ (Qt)
class Grid
{
   private:
       vector<vector<Token*> > grid;
   public:
      Grid() : grid ( 6, vector<Token*>(7) ) {}
};
а также так:
Код
C++ (Qt)
class Grid
{
public:
 Grid()  // default ctor
 {
   // set size of grid
   grid.resize(6);
   for(int i = 0; i < 6; ++i)
     grid[i].resize(7);
 }
 
private:
 vector< vector<Token*> > grid;
};
Но вылез новый баг, далее расскажу подробнее.
Алгоритм, там нет ничего секретного, все делается по стандартному. Я переписываю уравнения в частных производных в разносное уравнения, а затем решаю это уравнение. Нужно подробно?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 13:39
Цитировать
Дело в том, что так не получается, если сделать static. Компилятор начинает жаловаться когда во время декларирования появляется "(100).
Что у Вас за компилятор? У меня всё работает.. (исходники приатачены) Хотя так делать, действительно, не стоит - заголовочный файл: он на то и заголовочный))

Цитировать
Алгоритм, там нет ничего секретного, все делается по стандартному. Я переписываю уравнения в частных производных в разносное уравнения, а затем решаю это уравнение. Нужно подробно?
   
Ясненько) И большая там у вас сетка получается?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 14:12
Получается какая-понятка, Вы не создавали класс в заголовочному файле, а если поместить объявление вектора в середину класса, то компилятор ругается.
Но у меня появился другой баг, у меня матрица не хочет выводиться второй раз (после решения), причем программа не ругается, но матрицу второй раз не выводит.

Сетка получается 1000 * 1000 при средней точности. К тому же так называемая "явная" схема не дает требуемой точности для моих уравнений, поэтому мне нужно использовать "не явную" схему т.е. по ходу решения решать систему из N алгебраических уравнений, там получается трех диагональная матрица, которую я решаю методом прогонки.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 14:20
А еще я не могу понять, почему у меня в консоль ничего не выводится, хотя она запускается. У меня QT под линукс. ???


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 14:43
Цитировать
Вы не создавали класс в заголовочному файле, а если поместить объявление вектора в середину класса, то компилятор ругается.
Вот создал в классе)) Никто не ругается)) (исходники приатачены) (Тока не вздумайте ентот изврат использовать в программе)

Цитировать
Но у меня появился другой баг, у меня матрица не хочет выводиться второй раз (после решения), причем программа не ругается, но матрицу второй раз не выводит.
Ну я не телепат, не знаю что вы там понаписали) Исходники выложите..

Цитировать
А еще я не могу понять, почему у меня в консоль ничего не выводится, хотя она запускается. У меня QT под линукс
А вы как программу запускаете?






Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 15:55
вот исходники (ниже):
Если поставить вместо Q-векторов, просто матрицу a[100][100] то все работает нормально, а если поставить векторы, то матрица после ришения не выводится. ???


консоль сама запускается, если выполняешь программу в QT, хотя когда пойти в папку с программой и попробовать запустить программу, то ничего не получается, даже никак не реагирует.

Так сделать так как вы предложили не получается, вылезает ошибка "multiple definition of` matrix3diagonal:: _row '"хотя вроде все правельно ???


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 16:07
Цитировать
консоль сама запускается, если выполняешь программу в QT, хотя когда пойти в папку с программой и попробовать запустить программу, то ничего не получается, даже никак не реагирует.
Ахахаа)) Реагирует, можете убедиться в этом посмотрев в системном мониторинге (ну или как он у вас там называется) Прога Ваша загружается на самом деле и выполняется.. Вы наверно её "мышкой" запускали) Попробуйте так: (у вас, разумеется, путь и название другое будет)
Код
C++ (Qt)
max@T1000:~/Qt-projects/TestMatrix_v2$ ./TesrMatrix
 

Пойду взгляну на ваши исходники) Мне, кстати тож скоро нужно будет писать что-то подобное, но я склоняюсь к функциям Грина..

 


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 16:19
Цитировать
консоль сама запускается, если выполняешь программу в QT, хотя когда пойти в папку с программой и попробовать запустить программу, то ничего не получается, даже никак не реагирует.
Ахахаа)) Реагирует, можете убедиться в этом посмотрев в системном мониторинге (ну или как он у вас там называется) Прога Ваша загружается на самом деле и выполняется.. Вы наверно её "мышкой" запускали) Попробуйте так: (у вас, разумеется, путь и название другое будет)
Код
C++ (Qt)
max@T1000:~/Qt-projects/TestMatrix_v2$ ./TesrMatrix
 


Пойду взгляну на ваши исходники) Мне, кстати тож скоро нужно будет писать что-то подобное, но я склоняюсь к функциям Грина..

 
Кстати в исходниках, реализация метода прогонки, а не решения PDE.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 16:28
Ох Майн гот!

Вам повезло, что niXman Ваших исходников не видел)

Я же Вам говорил не используйте тот приём что я приводил (со статическими членами)..

Цитировать
Кстати в исходниках, реализация метода прогонки, а не решения PDE.
Ну я уж понял)

Сейчас покажу, как бы я сделал эту хрень))


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 16:33
Ох Майн гот!

Вам повезло, что niXman Ваших исходников не видел)

Я же Вам говорил не используйте тот приём что я приводил (со статическими членами)..

Цитировать
Кстати в исходниках, реализация метода прогонки, а не решения PDE.
Ну я уж понял)

Сейчас покажу, как бы я сделал эту хрень))

так я просто для пробы ;D


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 18:32
А я тем временем нашел ошибку, которая приводила к не выполнению части кода с использованием QVector, хотя если использовать обычные массивы, то проблемы не было, как я уже говорил.
Суть проблемы заключалась как всегда в "1", а именно в части кода:
Код
C++ (Qt)
.........
void matrix3diagonal::back(){ j=N-1;
   x[j]=(b[j]-a[j][j-1]*beta[j])/(a[j][j-1]*alpha[j]+a[j][j]);
   for(i=N-1;i>-1;i--){x[i-1]=alpha[i]*x[i]+beta[i]; } //xn розвязок
}//back
...........
 
надо в цикле вместо i>-1 поставить i>0

робочий исходник:


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 18:50
Интересно посмотреть на  вашу реализацию  ???


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 19:16
Цитировать
Интересно посмотреть на  вашу реализацию
Не вопрос)

diagonalmatrix.h
Код
C++ (Qt)
#ifndef DIAGONALMATRIX_H
#define DIAGONALMATRIX_H
 
#include <QVector>
 
class DiagonalMatrix
{
public:
   DiagonalMatrix(int dim = 100);
   QVector<double> operator()(QVector<QVector<double> > &a,
                              QVector<double> &b, bool *isValid = 0) const;
 
   int dimension() const { return _dim; }
 
private:
   int _dim; // dimension
};
 
#endif // DIAGONALMATRIX_H
 

diagonalmatrix.cpp
Код
C++ (Qt)
#include "diagonalmatrix.h"
 
DiagonalMatrix::DiagonalMatrix(int dim)
   : _dim(dim)
{
}
 
QVector<double> DiagonalMatrix::operator()(QVector<QVector<double> > &a,
                          QVector<double> &b, bool *isValid) const
{
   static QVector<double> x(_dim);
 
   if (a.size() != (int)_dim) {
       if (isValid) {
           *isValid = false;
           return x;
       }
   }
 
   foreach(QVector<double> row, a) {
       if (row.size() != (int)_dim) {
           if (isValid)
               *isValid = false;
               return x;
       }
   }
 
   for (int i = 0; i < _dim-1; i++) {
       QVector<double> row = a[i];
       double c = -a[i+1][i]/row[i]; // NOTE!! if row[i] == 0, то капец!! Так что думайте сами))
 
       for (int j = i; j < _dim; j++) {
           a[i+1][j] += c * a[i][j];
       }
       b[i+1] += c * b[i];
   }
 
   for (int i = _dim - 1; i > 0; i--) {
       QVector<double> row = a[i];
       double c = -a[i-1][i]/row[i]; // NOTE!! if row[i] == 0, то капец!! Так что думайте сами))
       for (int j = i; j == 0; j--) {
           a[i-1][j] += c * a[i][j];
       }
       b[i-1] += c * b[i];
   }
 
   for (int i = 0; i < _dim; i++)
       x[i] = b[i]/a[i][i];
 
   return x;
}
 

А вот так енто используется:

main.cpp
Код
C++ (Qt)
#include <iostream>
#include "diagonalmatrix.h"
 
using namespace std;
 
int main()
{
  DiagonalMatrix dm(2);
 
  QVector<QVector<double> > a(2, QVector<double>(2));
  a[0][0] = 1.0;
  a[0][1] = 2.0;
  a[1][0] = 2.0;
  a[1][1] = -1.0;
  QVector<double> b(2);
  b[0] = 1.0;
  b[1] = -3.0;
 
  QVector<double> x = dm(a, b);
 
  for (int i = 0; i < dm.dimension(); i++)
      cout << x[i] << endl;
 
   return 0;
}
 

Разумеется здесь:
Код
C++ (Qt)
double c = -a[i-1][i]/row[i]; // NOTE!! if row[i] == 0, то капец!! Так что думайте сами))
 
 
Нужно всегда проверять это условие..

Во-вторых может в принципе оказаться, что система ваша не совместна..

Вообще, на мой взгляд нужно в public секции класса добавить что-то вроде:
Код
C++ (Qt)
enum State {NoProblem = 0, NotCompatible, ErrDimension, ну и т.д. по фкусу))}
 
и следовательно передовать вместо указателя на bool, указатель на State..
типа так:
Код
C++ (Qt)
State st;
DiagonalMatrix dm(2);
...
QVector<double> x = dm(a, b, &st);
...
 
 
так было бы информативнее..
А вообще уже есть готовая библиотека, работающая с матрицами.. Где-то на форуме тема проскальзывала)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 19:17
Млин, забыл исходники прикрутить))


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 20:22
Цитировать
А вообще уже есть готовая библиотека, работающая с матрицами.. Где-то на форуме тема проскальзывала)
Ну вообще то мне нужен только метод прогонки для матриц. И если сделаешь сам, то можно сделать как захочешь и как тебе будет удобнее. ;)


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: m_ax от Апрель 29, 2010, 20:38
Цитировать
Ну вообще то мне нужен только метод прогонки для матриц
Что вы понимаете под прогонкой матриц?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Апрель 29, 2010, 20:55
тут все сказано вот (http://ru.wikipedia.org/wiki/Трёхдиагональная_матрица)
 ;)спасибо за помощь! ;) если что то обращайтесь.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Sancho_s_rancho от Май 03, 2010, 21:27
На тему динамического двумерного массива могу предложить это.
Двумерный шаблонный массив с ресайзом через qMalloc/qRealloc. В большинстве случаев достаточно.




Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Май 05, 2010, 19:16
 ???
Возник еще один вопрос, я в свой класс MainWindow добавил еще диалоговый класс Dialog. Но мне нужно обращаться к переменным которые определены в главном классе MainWindow.
В классе Dialog я делаю так:
Код
C++ (Qt)
MainWindow ma(this);
ma.kadr;
но система ругается,
Цитировать
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
что мне сделать?


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: KuZ от Май 05, 2010, 21:16
((MainWindow*)sender())->  вроде так должно пойти и если не ошибаюсь есть еще метод parent.


Название: Re: максимальное количество елементов в двумерном масиве
Отправлено: Ubuntu_linux от Май 05, 2010, 22:39
Спасибо!
Я обдумал и решил пойти другим путем, то есть я из класса Dialog вытягиваю все флаги и переменные, а потом обрабатываю с помощью их нужны мне функции в главном классе Mainwindow.