Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/37: Рейтинг темы: голосов - 37, средняя оценка - 4.51
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779

Access violation reading location

06.02.2014, 12:55. Показов 7828. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые знатоки, подскажите пожалуйста в чем проблема или хотя бы типовые причины возникновения, данного исключения (см. заголовок). На сколько я понимаю причина в том что пытаюсь прочитать данные в "закрытом" участке памяти.
вот сам код:
C++
1
2
3
4
5
6
7
8
9
10
    for(UINT i = 0; i <= numMipLevel; i++)
    {
        D3D11_MAPPED_SUBRESOURCE ms;
        if(FAILED(g_pd3d11DeviceContext->Map(g_pMassTextures[i], 0, D3D11_MAP_READ, 0, &ms)))
            break;
        
        g_pd3d11DeviceContext->UpdateSubresource(textArray, D3D11CalcSubresource(0, i, 1), 0, ms.pData, ms.RowPitch, ms.DepthPitch);//тут на 2-ой итерации вскакиева исключение
 
        g_pd3d11DeviceContext->Unmap(g_pMassTextures[i], 0);
    }
суть программы заключается в загрузке текстуры, программной генерации мип уровней и создании массива текстур из сгенерированных текстур + исходная текстура(0-ой элемент), для текстур небольших размеров 512х512 - 1024 х 1024 работает адекватно если размер покрупнее к примеру 1200 х 1960 и больше начинается такая проблема, подскажите пожалуйста.

Добавлено через 1 час 46 минут
как вообще исправлять такие ошибки ? а то пол дня маюсь толку нет, указывает адрес по которому не может произвести чтение, может как-то с помощью этого адреса можно найти объект который является причиной возникновения исключения и уже смотреть его ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2014, 12:55
Ответы с готовыми решениями:

Access violation reading location
Помогите пожалуйста! Создаю программу, которая ведет учет данных. В бинарный dat-файл записываются объекты класса (Account) -...

Access violation reading location
добрый вечер , что может означать ошибка ? &quot;Exception thrown at 0x00B427CD in ConsoleApplication4.exe: 0xC0000005: Access violation reading...

access violation reading location
access violation reading location такая проблема если вести информацию про двух и больше студентов помогите пожалуйста очень срочно надо ...

12
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
06.02.2014, 12:59
попробуйте
C++
1
for(UINT i = 0; i <= numMipLevel; i++)
заменить на
C++
1
for(UINT i = 0; i < numMipLevel; i++)
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
06.02.2014, 13:06  [ТС]
вроде нет выхода за границу, проверил
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
06.02.2014, 13:07
Вы попробовали заменить или что?
массив g_pMassTextures, как я понял имеет размер numMipLevel, тогда посл элемент там numMipLevel-1
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
06.02.2014, 13:27  [ТС]
g_pMassTextures имеет размер numMipLevel + 1,
можно даже вот так вот записать:
C++
1
2
3
4
5
6
7
8
9
10
11
    for(UINT i = 0; i < g_pMassTextures.size(); i++)
    {
        D3D11_MAPPED_SUBRESOURCE ms;
        ZeroMemory(&ms, sizeof(ms));
        if(FAILED(g_pd3d11DeviceContext->Map(g_pMassTextures[i], 0, D3D11_MAP_READ, 0, &ms)))
            break;
        
        g_pd3d11DeviceContext->UpdateSubresource(textArray, D3D11CalcSubresource(0, i, 1), 0, ms.pData, ms.RowPitch, ms.DepthPitch);
 
        g_pd3d11DeviceContext->Unmap(g_pMassTextures[i], 0);
    }
т.к. g_pMassTextures - вектор, всеравно выскакиевает(

Добавлено через 14 минут
при попытке проверить содержимое переменных пишет:Error reading register value.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
06.02.2014, 13:28
Маловато кода для анализа. Если включить телепатию, то подозреваю, что проблема выходе за границу в textArray. Надо повыводить индексы D3D11CalcSubresource(0, i, 1) в лог перед передачей в функцию и проследить где идет выход за пределы.
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
06.02.2014, 13:47  [ТС]
с индексами вроде все нормально, проверил, вот полный код:
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
D3DX11_IMAGE_LOAD_INFO ili;
    ZeroMemory(&ili, sizeof(ili));
    ili.BindFlags = 0;
    ili.Height = D3DX11_FROM_FILE;
    ili.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    ili.Width = D3DX11_FROM_FILE;
    ili.Depth = D3DX11_FROM_FILE;
    ili.FirstMipLevel = 0;
    ili.MipLevels = 1;
    ili.BindFlags = 0;
    ili.CpuAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE;
    ili.Usage = D3D11_USAGE_STAGING;
    ili.MiscFlags = 0;
    ili.Filter = D3DX11_FILTER_NONE;
    ili.MipFilter =  D3DX11_FILTER_NONE;
    ili.pSrcInfo = 0;
    
    ID3D11Resource *g_text;
    ID3D11Texture2D *pSrcText2D;
 
    if(FAILED(D3DX11CreateTextureFromFile(g_pd3d11Device, L"1.jpg", &ili, NULL, (ID3D11Resource**)&pSrcText2D, NULL)))
        return 0;
 
    
 
    int numMipLevel = CreateMipMap(pSrcText2D);
 
    D3D11_TEXTURE2D_DESC td;
    pSrcText2D->GetDesc(&td);
 
    ID3D11Texture2D *textArray = 0;
    D3D11_TEXTURE2D_DESC tdArray;
 
    ZeroMemory(&tdArray,sizeof(tdArray));
    tdArray.ArraySize = numMipLevel+1;
    tdArray.Format = td.Format;
    tdArray.Height = td.Height;
    tdArray.Width = td.Width;
    tdArray.CPUAccessFlags = 0;
    tdArray.MiscFlags = 0;
    tdArray.SampleDesc.Count = 1;
    tdArray.SampleDesc.Quality = 0;
    tdArray.Usage = D3D11_USAGE_DEFAULT;
    tdArray.BindFlags = D3D11_BIND_SHADER_RESOURCE;
    tdArray.MipLevels = td.MipLevels;
 
    if(FAILED(g_pd3d11Device->CreateTexture2D(&tdArray, NULL, &textArray)))
        return 0;
 
    for(UINT i = 0; i <= numMipLevel; i++)
    {
        D3D11_MAPPED_SUBRESOURCE ms;
        ZeroMemory(&ms, sizeof(ms));
        if(FAILED(g_pd3d11DeviceContext->Map(g_pMassTextures[i], 0, D3D11_MAP_READ, 0, &ms)))
            break;
    
        g_pd3d11DeviceContext->UpdateSubresource(textArray, D3D11CalcSubresource(0, i, 1), 0, ms.pData, ms.RowPitch, ms.DepthPitch);
 
        g_pd3d11DeviceContext->Unmap(g_pMassTextures[i], 0);
    }
функция
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
int CreateMipMap(ID3D11Texture2D *texture)
{
    D3D11_TEXTURE2D_DESC td;
 
    texture->GetDesc(&td);
 
    UINT width = td.Width;
    UINT height = td.Height;
 
    float numMipLevel = (int)(log10((float)width)/log10((float)2));
 
    if((int)(log10((float)height)/log10((float)2)) > numMipLevel)
        numMipLevel = (int)log10((float)height)/log10((float)2);
 
 
    
    numMipLevel = 1;//специально поставил ограничения пока что
    g_pMassTextures.push_back(texture);
 
 
    for(int i = 1; i <= numMipLevel; i++)
        g_pMassTextures.push_back(CreateTexture2D(g_pd3d11Device, g_pMassTextures[i-1]));
    
 
 
        
    return numMipLevel;
}
еще функция, подозреваю что именно в ней косяк:
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
ID3D11Texture2D* CreateTexture2D(ID3D11Device *pDevice, ID3D11Texture2D *srcText)
{
    D3D11_TEXTURE2D_DESC srcTD;//описание исходной текстуры
    srcText->GetDesc(&srcTD);
 
    UINT width = srcTD.Width/2;//ширина новой текстуры
    if(!width)
        width = 1;
    UINT height = srcTD.Height/2;//высота новой текстуры
    if(!height)
        height = 1;
    float stepU = srcTD.Width/(float)width;//ширина участка выборки цветов для новой текстуры
    float stepV = srcTD.Height/(float)height;//высота участка выборки цветов для новой текстуры
    float sUV = stepU*stepV;//площадь участка выборки цветов для новой текстуры
 
    int sizeVBox = ceil(stepV);//высота участва(количество текселей)
    int sizeUBox = ceil(stepU);//ширина участка(количество текселей)
    struct ColorTexels
    {
        XMCOLOR color;
        float weight;
        ColorTexels()
        {
            weight = 0;
        }
    };
    ColorTexels **colorBox = new ColorTexels*[sizeVBox];//участок старой текстуры с цветами
    for(int i = 0; i < sizeVBox; i++)
        colorBox[i] = new ColorTexels[sizeUBox];
 
    XMCOLOR *dstBuffTexels = new XMCOLOR[width * height];//буфер текселей новой текстуры
 
    D3D11_MAPPED_SUBRESOURCE ms;
    ZeroMemory(&ms, sizeof(ms));
 
    if(FAILED(g_pd3d11DeviceContext->Map(srcText, 0, D3D11_MAP_READ, 0, &ms)))
        return 0;
 
    XMCOLOR *srcBuffTexels = new XMCOLOR[srcTD.Width * srcTD.Height];//данные цветов исходной текстуры
    
    memcpy(srcBuffTexels, ms.pData, ms.RowPitch * srcTD.Height);
 
    g_pd3d11DeviceContext->Unmap(srcText, 0);
 
    for(int i = 0; i < height; i++)
        for(int j = 0; j < width; j++)
        {
            float bU = stepU * j;//определяем границы участка для выборки текселей из старой текстуры
            float eU = bU + stepU;
 
            float bV = stepV * i;
            float eV = bV + stepV;
 
            float sumU = bU, sumV = bV;
            float sU, sV;
            dstBuffTexels[width*i+j] = 0;
            
            for(int k = 0; k < sizeVBox; k++)
            {
                for(int q = 0; q < sizeUBox; q++)
                {
                    colorBox[k][q].color = srcBuffTexels[srcTD.Width*((int)bV+k) + (int)bU+q];//выбираем цвет пикселя из старой текстуры
                    
                    if((int)(bU+q) + 1 <= stepU + bU)
                        sU = (int)(bU+q) + 1 - sumU;//определяем ширину части пикселя в области выборки
                    else
                        sU = eU - (int)eU;
 
                    if((int)(bV+k) + 1 <= stepV+ bV)
                        sV = (int)(bV+k) + 1 - sumV;//определяем высоту части пикселя в области выборки
                    else
                        sV = eV - (int)eV;
 
                    sumU += sU;
 
                    colorBox[k][q].weight = (sU*sV)/sUV;//определяем "вес" пикселя
 
                }
                sumU = bU;
                sumV += sV;
            }
            for(int e = 0; e < sizeVBox; e++)
                for(int r = 0; r <sizeUBox; r++)
                {
                    colorBox[e][r].color.b *= colorBox[e][r].weight;
                    colorBox[e][r].color.r *= colorBox[e][r].weight;
                    colorBox[e][r].color.g *= colorBox[e][r].weight;
                    dstBuffTexels[width*i+j] = dstBuffTexels[width*i+j] + colorBox[e][r].color;
                }
             
        }
 
    delete  []srcBuffTexels;
 
    ID3D11Texture2D *text;
    
    D3D11_SUBRESOURCE_DATA sd;
    ZeroMemory(&sd, sizeof(sd));
    sd.pSysMem = (void*)dstBuffTexels;
    sd.SysMemPitch = width*4;
    sd.SysMemSlicePitch = width*height*4;
 
    D3D11_TEXTURE2D_DESC td;
    ZeroMemory(&td, sizeof(td));
    td.Width = width;
    td.Height = height;
    td.MipLevels = 1;
    td.ArraySize = 1;
 
    td.SampleDesc.Count = 1;
    td.SampleDesc.Quality = 0;
    td.Usage = D3D11_USAGE_STAGING;
    td.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
    td.BindFlags = 0;
 
    td.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
    td.MiscFlags = 0;
 
    for(int i = 0; i < sizeVBox; i++)
            delete []colorBox[i];
    delete []colorBox;
 
    if(FAILED(pDevice->CreateTexture2D(&td, &sd, &text)))
    {
        delete []dstBuffTexels;
        return 0;
    }
    else
    {
        delete []dstBuffTexels;
        return text;
    }
}
Добавлено через 11 минут
т.е. получается что из загруженной текстуры он нормально данные считывает, а с той что сгенерирована с помощью CreateTexture2D не может считать данные
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
07.02.2014, 00:08
Цитата Сообщение от NEvOl Посмотреть сообщение
вот полный код
В общем посмотрел код, хотел тебе вопросов позадавать наводящих, но что-то их слишком много получилось.
Вы под отладчиком код запускали, что он говорит?
А вообще, заочно тяжело диагностировать, хоть и можно попробовать телепатировать. Но гадать не хочется, если есть возможность можно прислать мне проект целиком, я посмотрю.

Добавлено через 59 минут
C++
1
2
3
XMCOLOR *srcBuffTexels = new XMCOLOR[srcTD.Width * srcTD.Height];//данные цветов исходной текстуры
    
memcpy(srcBuffTexels, ms.pData, ms.RowPitch * srcTD.Height);
Ну ладно, тогда буду телепатировать.
А вот тут размеры точно соотносятся? Не может ли тут ms.RowPitch * srcTD.Height в какой-то момент быть больше чем srcTD.Width * srcTD.Height? Из справки по D3D11_MAPPED_SUBRESOURCE, например, это не очевидно.
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
07.02.2014, 05:59  [ТС]
ну по идее ms.RowPitch = srcTD.Width * 4 т.к. ms.RowPitch указывается в байтах

Добавлено через 7 минут
вроде все нормально ms.RowPitch * srcTD.Height = srcTD.Width * 4 * srcTD.Height

Добавлено через 6 минут
вот что лог выдает:
First-chance exception at 0x0FB120E9 (igd10umd32.dll) in Filtering.exe: 0xC0000005: Access violation reading location 0x0ABF8000.
Unhandled exception at 0x0FB120E9 (igd10umd32.dll) in Filtering.exe: 0xC0000005: Access violation reading location 0x0ABF8000.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
07.02.2014, 09:27
Цитата Сообщение от NEvOl Посмотреть сообщение
First-chance exception at 0x0FB120E9 (igd10umd32.dll) in Filtering.exe: 0xC0000005: Access violation reading location 0x0ABF8000.
Unhandled exception at 0x0FB120E9 (igd10umd32.dll) in Filtering.exe: 0xC0000005: Access violation reading location 0x0ABF8000.
Это все хорошо, но все-таки. Что говорит отладчик? Stack trace удалось получить? (я не про dx debug, хоть ее и надо использовать в отладочной сборке, я про отладчик в вашей IDE. Я так понимаю это Visual Studio).
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
07.02.2014, 12:54  [ТС]
вот что выдает MVS
Миниатюры
Access violation reading location  
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
07.02.2014, 14:03
Цитата Сообщение от NEvOl Посмотреть сообщение
вот что выдает MVS
Еще бы окошко Locals полностью заскринить. Но вообще похоже проблема в чтении из ms.pData.
0
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
07.02.2014, 14:53  [ТС]
в Locals данные недоступны(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2014, 14:53
Помогаю со студенческими работами здесь

ошибка Access violation reading location 0x00000066
Ошибка : Unhandled exception at 0x100e14cf (msvcr100d.dll) in 3.4.exe: 0xC0000005: Access violation reading location 0x00000066. ...

Массивы указателей и ошибка Access violation reading location
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; class Number { public: int x; int calc(Number* start,...

Помогите с ошибкой Access violation reading location 0x1ed1d9f8.
Не могу разобраться с VS.... У меня был хороший, проверенный проект, в котором все хорошо работало и небыло проблем. Тут я стал добавлять в...

Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000
Есть задача Есть решение Основное приложение: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Ошибка Unhandled exception at 0x001EB509 in Gauss1.exe: 0xC0000005: Access violation reading location 0xCCCCCCD4
Программа должна генерировать и выводить на экран матрицу n x n. Однако, вылетает исключение: Unhandled exception at 0x001EB509 in...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru