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

Какие существуют ограничения на размер двумерных массивов? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как работают драйвера? http://www.cyberforum.ru/cpp-beginners/thread553941.html
Разбираю драйвер-фильтр passthru, в нем есть функция MPSend которая получает а затем отсылает пакет далее (это пример ничего не делающего драйвера), Еще есть функция FilterIO которая зарегана как управляющая внутри драйвера, а так же функции передачи и отправки данных между ним и апликацией, как впрочем, наверно, во многих дровах.... А вот как построить перехват и отправку обработанных данных...
C++ Разбить на подпрограммы (седловые точки матрицы) Приветствую. Вот код, в консоли программа выводит на экран седловые точки матрицы MxN (минимальные в столбце и максимальные в строке). Помогите, пожалуйста, выделить из main() отдельно функцию вычисления максимальных в строках элементов и функцию вычисления минимальных в столбцах элементов. Сравнивание минимумов и максимумов а также вывод на экран должны остаться в main() #include... http://www.cyberforum.ru/cpp-beginners/thread553939.html
Задача перебора элементов C++
Всем привет! Собственно есть задача с которой я не могу совладать. Загвоздка не в программировании, а в том чтоб придумать алгоритм, чтобы решал эту задачу. Может кто подскажет, я уже всю голову сломал. Задача на первый взгляд элементарная, но это только на первый взгляд. Задача: есть некоторая разнородная многопроцессорная система, которая состоит из N типов процессоров и mi процессоров...
Считывание строки из Edit C++
Вот кусок программы, int K=2; int Lenght; char tmp; string s0; s0=Edit1->Text.c_str(); Lenght=s0.Length(); if ((_2condition(s0))&(_1condition(s0))&(length_slova(s0)) { Memo1->Lines->Add(s0); } else memo2->lines->Add(s0); }
C++ Пересечение массивов http://www.cyberforum.ru/cpp-beginners/thread553892.html
Даны два массива, нужно найти их пересечение то есть некий третий массив содержащий все одинаковые элементы первого и второго массива без повторов. (кратность каждого элемента в третем массиве равняется минимуму из его кратностей в первом и втором массиве) Сделал ввод первых двух массивов как нужно, а вот с пересечением не могу разобраться. Буду признателен за помощь ! #include...
C++ Пустая строка Делал задание по перегрузке функций. Перегружаю функцию sum. В одном из заданий надо ее перегрузить для подсчета значения переменных типа double, которые на ввод идут строкой. Почему то самой первой переменной типа double ставится пустое значение. #include "stdafx.h" #include <iostream> #include <cstdlib> using namespace std; struct complex { int re; подробнее

Показать сообщение отдельно
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
21.04.2012, 08:04     Какие существуют ограничения на размер двумерных массивов?
Пишу в Visual Studio 2010
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
#include <iostream>
using namespace std;
 
int main()
{
    const long int size_time = 1000; // временные слои: t_0, t_1, t_2, ... , t_size_time    
    const long int SIZE_TIME = size_time + 1; // SIZE_TIME - количество временных слоёв
    // SIZE_TIME = size_time + 1 (1 слой - нулевой)
 
    const long int size_dist = 1000; // узлы по координате: r_-2, r_-1, r_0, ... , r_size_dist, r_size_dist_+1, r_size_dist_+2
    const long int SIZE_DIST = size_dist + 5; // SIZE_DIST - количество узлов по координате
    // SIZE_DIST = size_dist + 1 + 2 + 2 (1 - нулевой, 2 вспомогательных слева и 2 вспомогательных справа)
 
    // Создаём 5 двумерных массивов, в которых будут храниться решения в консервативных переменных:
    double solution_array_U0 [SIZE_TIME][SIZE_DIST];
    double solution_array_U1 [SIZE_TIME][SIZE_DIST];
    double solution_array_U2 [SIZE_TIME][SIZE_DIST];
    double solution_array_U3 [SIZE_TIME][SIZE_DIST];
    double solution_array_U4 [SIZE_TIME][SIZE_DIST];
 
    // Заполняем их всех нулями:
    for (int i = 0; i < SIZE_TIME; i++)
    {
        for (int j = 0; j < SIZE_DIST; j++)
        {
            solution_array_U0 [i][j] = 0.0;
            solution_array_U1 [i][j] = 0.0;
            solution_array_U2 [i][j] = 0.0;
            solution_array_U3 [i][j] = 0.0;
            solution_array_U4 [i][j] = 0.0;
        }
    }
 
        // Решил вывести один на экран и посмотреть:
    for (int i = 0; i < SIZE_TIME; i++)
    {
        for (int j = 0; j < SIZE_DIST; j++)
        {
            cout << solution_array_U0 [i][j] << " ";            
        }
        cout << endl;
    }           
     
    char response;         // эти 2 строчки для
    std::cin >> response;  // задержки экрана
    
    return 0;
}
Я думал, увижу на экране таблицу нулей: 1001 строчку и 1005 столбцов.
Когда запускаю, вылазиет окно. Там надпись: "Необработанное исключение в "0x01063fd7" в "MHDAccelerator.exe": 0xC00000FD: Stack overflow." И 2 варианта: "Прервать", "Продолжить". Причём окно исчезает только если нажать "Прервать". В текстовом редакторе появляется вкладка: chkstk.asm. Там написано:
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
        page    ,132
        title   chkstk - C stack checking routine
;***
;chkstk.asm - C stack checking routine
;
;       Copyright (c) Microsoft Corporation. All rights reserved.
;
;Purpose:
;       Provides support for automatic stack checking in C procedures
;       when stack checking is enabled.
;
;*******************************************************************************
 
.xlist
        include cruntime.inc
.list
 
; size of a page of memory
 
_PAGESIZE_      equ     1000h
 
 
        CODESEG
 
page
;***
;_chkstk - check stack upon procedure entry
;
;Purpose:
;       Provide stack checking on procedure entry. Method is to simply probe
;       each page of memory required for the stack in descending order. This
;       causes the necessary pages of memory to be allocated via the guard
;       page scheme, if possible. In the event of failure, the OS raises the
;       _XCPT_UNABLE_TO_GROW_STACK exception.
;
;       NOTE:  Currently, the (EAX < _PAGESIZE_) code path falls through
;       to the "lastpage" label of the (EAX >= _PAGESIZE_) code path.  This
;       is small; a minor speed optimization would be to special case
;       this up top.  This would avoid the painful save/restore of
;       ecx and would shorten the code path by 4-6 instructions.
;
;Entry:
;       EAX = size of local frame
;
;Exit:
;       ESP = new stackframe, if successful
;
;Uses:
;       EAX
;
;Exceptions:
;       _XCPT_GUARD_PAGE_VIOLATION - May be raised on a page probe. NEVER TRAP
;                                    THIS!!!! It is used by the OS to grow the
;                                    stack on demand.
;       _XCPT_UNABLE_TO_GROW_STACK - The stack cannot be grown. More precisely,
;                                    the attempt by the OS memory manager to
;                                    allocate another guard page in response
;                                    to a _XCPT_GUARD_PAGE_VIOLATION has
;                                    failed.
;
;*******************************************************************************
 
public  _alloca_probe
 
_chkstk proc
 
_alloca_probe    =  _chkstk
 
        push    ecx
 
; Calculate new TOS.
 
        lea     ecx, [esp] + 8 - 4      ; TOS before entering function + size for ret value
        sub     ecx, eax                ; new TOS
 
; Handle allocation size that results in wraparound.
; Wraparound will result in StackOverflow exception.
 
        sbb     eax, eax                ; 0 if CF==0, ~0 if CF==1
        not     eax                     ; ~0 if TOS did not wrapped around, 0 otherwise
        and     ecx, eax                ; set to 0 if wraparound
 
        mov     eax, esp                ; current TOS
        and     eax, not ( _PAGESIZE_ - 1) ; Round down to current page boundary
 
cs10:
        cmp     ecx, eax                ; Is new TOS
        jb      short cs20              ; in probed page?
        mov     eax, ecx                ; yes.
        pop     ecx
        xchg    esp, eax                ; update esp
        mov     eax, dword ptr [eax]    ; get return address
        mov     dword ptr [esp], eax    ; and put it at new TOS
        ret
 
; Find next lower page and probe
cs20:
        sub     eax, _PAGESIZE_         ; decrease by PAGESIZE
        test    dword ptr [eax],eax     ; probe page.
        jmp     short cs10
 
_chkstk endp
 
        end
Причём на 99-ую строчку:
C++
1
        test    dword ptr [eax],eax     ; probe page.
слева указывает жёлтая стрелочка. И ничего не происходит. Наверху написано "Отладка". Чтобы всё это прекратилось жму в меню: Отладка -> Остановить отладку.
Кто-нибудь знает, что происходит? Может это потому, что массив слишком большой? У меня ничего больше в голову не приходит.

Добавлено через 12 минут
Нет. Поставил малое количество строк и столбцов. Всё равно не работает. По-ходу, это тут вообще не при чём.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru