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

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

Войти
Регистрация
Восстановить пароль
 
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 719
#1

Большой динамический массив - C++

22.05.2013, 23:31. Просмотров 463. Ответов 5
Метки нет (Все метки)

Столкнулся с проблемой, имеется большой массив создаваемый динамически (~1000000 ячеек) и примерно на 350000 на одной и тойже ячейке кидается исключение "чтение памяти невозможно", каковы причины могу этого ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2013, 23:31     Большой динамический массив
Посмотрите здесь:

Один большой динамический массив вместо нескольких меньшего размера - C++
Уважаемые форумчане, Прошу помочь советом. Интересует ответы на вопросы: Возможно ли? Если да, то как реализовать? ...

очень большой массив - C++
Здравстуйте! Необходимо решить физическую задачку явной схемой, однако столкнулся с проблемой : нужен очень большой трехмерный массив и...

Большой двумерный массив - C++
Нужен массив 999999996 на 999999997, но компилятор ругается! Заранее спасибо!

Большой двумерный массив как член класса - C++
Размеры массива 2048 на 512. Создал, заполняю в конструкторе, но результата нету. Такое вообще реально, без динамического выделения памяти?

Динамический массив - C++
Передаю в функцию динамический массив, void func(int *a1, int& i1) int main() { int i=0; a= new int; func(a,i); //...

Динамический массив - C++
Всем доброго времени суток, столкнулся с такой проблеммой, в программе использовал статические двумерные массивы a, но на определенном...

Динамический массив - C++
Доброе время суток) Я почти полный нуб :sorry: , поэтому сразу прошу прощения :sorry: Я хочу создать такой массив, размер которого...

динамический массив - C++
Доброго всем времени суток.Помогите чайнику разобраться.Разбираюсь с массивами и столкнулся с не понятным,вот мой код: #include...

Динамический массив - C++
Имеется код, решающий транспортную задачу. Если задача "закрытая", то есть добавлять строки и столбцы не нужно, то все работает как надо,...

Динамический массив - C++
Распечатать элементы динамического массива mas в одномерный динамический a. 1 по правым диагоналям, начиная с правого верхнего элемента ...

Динамический массив - C++
Помогите пожалуйста переделать динамику,что бы она начиналась не с константы а с любого произвольного числа: ...

Динамический массив - C++
Пожалуйста, помогите с программой. Нужно создать динамический массив, найти количество отрицательных элементов массива. Затем найти сумму...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
WolondeWord
6 / 6 / 1
Регистрация: 06.05.2013
Сообщений: 18
23.05.2013, 03:22     Большой динамический массив #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    float **M;
    int m = 1000;
    int n = 1000;
    M = new float *[m];
    for(int i = 0; i < m; i++)
    {
        M[i] = new float [n];
    }
    for(int i = 0; i < m; i++)
        for(int j = 0; j < n; j++)
            M[i][j] = rand() % 10;
    getch();
}
Вот код. Программа создает динамический массив 1000*1000 элементов. То бишь 1000000 ячеек. Читает все нормально. Проходит по каждой ячейке.

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    float *M;
    int m = 1000000;
    M = new float [m];
    
    for(int i = 0; i < m; i++)
            M[i] = rand() % 10;
    getch();
}
Здесь одномерный массив который имеет размерность 1000000. То же самое. Работает нормально.
Может быть у тебя ошибка в коде?
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 719
23.05.2013, 10:27  [ТС]     Большой динамический массив #3
WolondeWord, неисключено, вот код функция:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
bool LoadPlaceFromFile(char* FileName, int SizeMap, IDirect3DDevice9 *device)
{
    ifstream  file;
    file.open(FileName, ios::binary);
 
    if(!file)
    {
        MessageBox(NULL, L"OpenFilePlace - faile", NULL, NULL);
        return 0;
    }
        
    BYTE B;
           int *massByte;
           massByte = new int[SizeMap*SizeMap];
    for(int j = 0; j < SizeMap*SizeMap; j++)
    {
        file >> B;
        massByte[j] = B;
    }
 
    massVertex = new MassVertex*[SizeMap];
    
    for(int j = 0; j < SizeMap; j++)
        massVertex[j] = new MassVertex[SizeMap];
 
    int i(0);
    for(int j = 0; j < SizeMap; j++)
        for(int k = 0; k < SizeMap; k++)
        {
            massVertex[j][k].x = k;
            massVertex[j][k].y = massByte[i];
            massVertex[j][k].z = -j;
            i++;
        }
 
    int size = (SizeMap*2)*(SizeMap*2);
    massPolygons = new MassPolygons[size];
    int k(0), w(1);
           //вот в этом цикле вылетает 
    for(int i = 0; i < SizeMap-1; i++)
        for(int j = 0; j < SizeMap-1; j++)
        {
            if(w%2)
            {
                massPolygons[k].x = massVertex[i][j].x;
                massPolygons[k].y = massVertex[i][j].y;
                massPolygons[k].z = massVertex[i][j].z;
                massPolygons[k+1].x = massVertex[i+1][j+1].x;
                massPolygons[k+1].y = massVertex[i+1][j+1].y;
                massPolygons[k+1].z = massVertex[i+1][j+1].z;
                massPolygons[k+2].x = massVertex[i+1][j].x;
                massPolygons[k+2].y = massVertex[i+1][j].y;
                massPolygons[k+2].z = massVertex[i+1][j].z;
            }
            w++;
            if(!(w%2))
            {
                massPolygons[k+3].x = massVertex[i][j].x;
                massPolygons[k+3].y = massVertex[i][j].y;
                massPolygons[k+3].z = massVertex[i][j].z;
                massPolygons[k+4].x = massVertex[i][j+1].x;
                massPolygons[k+4].y = massVertex[i][j+1].y;
                massPolygons[k+4].z = massVertex[i][j+1].z;
                massPolygons[k+5].x = massVertex[i+1][j+1].x;
                massPolygons[k+5].y = massVertex[i+1][j+1].y;
                massPolygons[k+5].z = massVertex[i+1][j+1].z;
            }
            w++;
            k += 6;
        }
 
    file.close();
 
    return 1;
 
}
Вот структуры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
struct MassVertex
        {
            float x;
            float y;
            float z;
        } **massVertex;
        struct MassPolygons
        {
            float x;
            float y;
            float z;
        } *massPolygons;
причем заметил что если посылаю размер 512 то вылетает где-то при обращении к 350000 ячейке, пробовал посылать 128, вылетает там же только где-то 2при обращении к 22000 ячейке, видать косяк в коде, но пока не вижу где(
в качестве размера в функцию посылается количество пикселей с одной стороны квадратного изображения типа *.RAW
WolondeWord
6 / 6 / 1
Регистрация: 06.05.2013
Сообщений: 18
23.05.2013, 10:35     Большой динамический массив #4
С индексами где-то намутил в цикле. Начинаешь обращаться на недоступное место в памяти. Перепроверь цикл с упором на индексы.

Мне кажется ошибка именно в индексах.
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 719
23.05.2013, 11:27  [ТС]     Большой динамический массив #5
WolondeWord, в массиве massVertex все отлично, говорит что чтение памяти невозможно в массиве massPolygons при обращении к ячейке [k+4] причем это далеко не последний элемент массива
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
23.05.2013, 12:02     Большой динамический массив #6
NEvOl, в 38 строке Вы выделяете (4*SizeMap^2) элементов, а в цикле обращаетесь к ячейке с индексом k, который принимает значения от 0 до ((SizeMap-2)^2)*6 + 5. Получаем выход за пределы диапазона.
Yandex
Объявления
23.05.2013, 12:02     Большой динамический массив
Ответ Создать тему
Опции темы

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