2-x мерный массив из структуры?
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 при запуске!Что за...?
{
mas = new float; // Ошибка именно здесь. Нужно: new float[10], далее во всяком случае ты пытаешь обращаться к 10-ти элементам.
}
В первом примере ошибка аналогична.
Цитата:
Originally posted by daredevil
for (i=0;i<10;i++)
{
mas = new float; // Ошибка именно здесь. Нужно: new float[10], далее во всяком случае ты пытаешь обращаться к 10-ти элементам.
}
В первом примере ошибка аналогична.
for (i=0;i<10;i++)
{
mas = new float; // Ошибка именно здесь. Нужно: new float[10], далее во всяком случае ты пытаешь обращаться к 10-ти элементам.
}
В первом примере ошибка аналогична.
ОЙ !!! Я этот i запхал чисто автоматически!
И никак не могу понять , в чём дело!!!
Сто раз всё просмотрел и не заметил!
ОГРОМНОЕ MEGATHANKS!!!
Если делать массив, его инициализировать
и удалять в одной подпрограмме - всё 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;
Я буду лучше юзать VECTOR.H !!!
Навёрнутый модуль! И примеров в MSDN много!!!
" ... Короткий путь не самый лёгкий !"
вот что получилось!!!
У кого какие предложения?
//______________________
#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.: Хе-Хе! Хоть что-то я могу!
"... Сбылась мечта идиота!"
Цитата:
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;
Неожиданное продолжение темы!
Если делать массив, его инициализировать
и удалять в одной подпрограмме - всё 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]
...
// делаю массив
mystruct **mas = new mystruct *[2];
Возможно это особенности твоей программы, но я не понимаю, зачем здесь двойной указатель? Простым указателем нельзя обойтись?