Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

2-x мерный массив из структуры?

724
05 февраля 2003 года
_anton
100 / / 04.11.2002
Столкнулся с таким приколом!Делаю массив
mas[2][10]
из структуры.Всё правильно вроде.Если его не
инициализировать! Как только присвою значения-висим!
Если его не инициализировать , то при выходе из проги
из-за очистки памяти почему-то вылетает ошибка!
Никак не могу понять, в чём дело? Где я сглупил?

.....
typedef struct mystruct
{
... данные
}mystruct;

mystruct **mas;
...
// делаю массив
mystruct **mas = new mystruct *[2];
for (i=0;i<10;i++) {
mas = new mystruct;
};
...
for (i=0;i<10;i++) {
delete[] mas;
};
delete[] mas;
........................
Решил вообще проверить работу массивов :

float **mas = new float *[10];
for (i=0;i<10;i++)
{
mas = new float;
}
...
for (i=0;i<10;i++)
for (j=0;j<10;j++) mas[j]=float(i+j);
...
for (i=0;i<10;i++) delete[] mas;
delete[] mas;

Результат этого кода - ASSERTION FAILED (сбой защиты, что-ли) или DEBUG ERROR при запуске!Что за...?
3.5K
06 февраля 2003 года
daredevil
1 / / 06.02.2003
for (i=0;i<10;i++)
{
mas = new float; // Ошибка именно здесь. Нужно: new float[10], далее во всяком случае ты пытаешь обращаться к 10-ти элементам.
}

В первом примере ошибка аналогична.
724
06 февраля 2003 года
_anton
100 / / 04.11.2002
Цитата:
Originally posted by daredevil
for (i=0;i<10;i++)
{
mas = new float; // Ошибка именно здесь. Нужно: new float[10], далее во всяком случае ты пытаешь обращаться к 10-ти элементам.
}

В первом примере ошибка аналогична.



ОЙ !!! Я этот i запхал чисто автоматически!
И никак не могу понять , в чём дело!!!
Сто раз всё просмотрел и не заметил!
ОГРОМНОЕ MEGATHANKS!!!

724
06 февраля 2003 года
_anton
100 / / 04.11.2002
Неожиданное продолжение темы!
Если делать массив, его инициализировать
и удалять в одной подпрограмме - всё OK!
Но накой мне это!?!
Как только перемещаю всё это в разные -
прога вешается при запуске!Почему?
Ведь mas везде видно!

float **mas //глобальная переменная

........1-функция
float **mas = new float *[10];
for (i=0;i<10;i++) mas = new float[10];

........2-функция
for (i=0;i<10;i++)
for (j=0;j<10;j++) mas[j]=float(i+j);
........3-функция
for (i=0;i<10;i++) delete[] mas;
delete[] mas;
724
06 февраля 2003 года
_anton
100 / / 04.11.2002
Нет уж! Хватит!
Я буду лучше юзать VECTOR.H !!!
Навёрнутый модуль! И примеров в MSDN много!!!


" ... Короткий путь не самый лёгкий !"
724
07 февраля 2003 года
_anton
100 / / 04.11.2002
После моего изврата над vector.h
вот что получилось!!!
У кого какие предложения?
//______________________
#include <iostream.h>
#include <vector.h>

using namespace std;

typedef vector<int> myvector;

typedef vector<int> vt1;
typedef vector<vt1> vt2;

// Вместо <int> можно запхать
// любой другой тип данных
// (к примеру структуру)

myvector v1;
vt2 v2;
vt1 vvv;

void main(void)
{
// Одномерный массив
v1.reserve(10); // если нужно просто
// зарезервировать память
for (int i=0;i<10;i++) v1.push_back(i);
// пихаем всякую гадость
// в V1
for (i=0;i<10;i++) cout << v1 << ", ";
// выводим на экран
v1.erase(v1.begin(),v1.end());
// убираем всякую гадость
// из памяти
if (v1.empty==false) cout << "Не очищен!";
cout << "\n"; // извращаемся
// Для Многомерного массива
//vvv.reserve(10);
for (i=0;i<10;i++) vvv.push_back(i);
for (i=0;i<10;i++) cout << vvv << ", ";
cout << "\n";
// Многомерный массив
//v2.reserve(10);
for (i=0;i<10;i++) v2.push_back(vvv);
for (i=0;i<10;i++)
for (int j=0;j<10;j++) v2[j] = i+j;
for (i=0;i<10;i++)
{
for (int j=0;j<10;j++) cout << v2[j] << ", ";
cout << "\n";
};
v2.erase(v2.begin(),v2.end());
// Я не совсем уверен , что для многомерного
// массива так надо чистить память!

if (v2.empty==false) cout << "Не очищен!";
cout << "\n";
}

P.S.: Хе-Хе! Хоть что-то я могу!
"... Сбылась мечта идиота!"
3.2K
10 февраля 2003 года
Roadroll
4 / / 10.02.2003
Цитата:
Originally posted by _anton
Неожиданное продолжение темы!
Если делать массив, его инициализировать
и удалять в одной подпрограмме - всё OK!
Но накой мне это!?!
Как только перемещаю всё это в разные -
прога вешается при запуске!Почему?
Ведь mas везде видно!

float **mas //глобальная переменная

........1-функция
float **mas = new float *[10];
for (i=0;i<10;i++) mas = new float[10];

........2-функция
for (i=0;i<10;i++)
for (j=0;j<10;j++) mas[j]=float(i+j);
........3-функция
for (i=0;i<10;i++) delete[] mas;
delete[] mas;



Ну нельзя же делать столько ошибок:-)

float **mas //глобальная переменная

........1-функция
float **mas = new float *[10]; // ошибка здесь
ты обьявил локальную переменную и инициализировал ее, глобальная осталась неинициализированой и программа естественно валится при обращении к ней из функций 2 и 3, будь внимательнее.

mas = new float *[10]; // правильный код
for (i=0;i<10;i++) mas = new float[10];

........2-функция
for (i=0;i<10;i++)
for (j=0;j<10;j++) mas[j]=float(i+j);
........3-функция
for (i=0;i<10;i++) delete[] mas;
delete[] mas; [/QUOTE]

426
10 февраля 2003 года
Krivonos
112 / / 20.01.2000
mystruct **mas;
...
// делаю массив
mystruct **mas = new mystruct *[2];

Возможно это особенности твоей программы, но я не понимаю, зачем здесь двойной указатель? Простым указателем нельзя обойтись?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог