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

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

Войти
Регистрация
Восстановить пароль
 
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
#1

Пустые указатели (ошибка доступа) - C++

08.08.2014, 21:44. Просмотров 301. Ответов 5
Метки нет (Все метки)

Здравствуйте, пишу простенький фрамеворк для загрузки текстур для того чтобы добавить эти текстуры в игру.
Существует Класс Load -> Наследник Texture
-> Наследник Font
Класс GameOBJ - для игровых обьектов
Класс Game - для самой игры, инициализация всяких систем и так далее.
Я использую библиотеку SDL2 в Visual Studio 2013
Так вот, в Классе Texture есть метод
C++
1
static Texture* Instance()
который возвращает
C++
1
new Texture
И обьявление
C++
1
Static Texture* ThisInstance
и в Texture.cpp он обьявлен как
C++
1
Texture* Texture::ThisInstance = nullptr
Реализация такова:
C++
1
2
3
4
5
6
7
8
9
Texture* Texture::Instance()
{
    if (Texture_Instance = nullptr)
    {
        Texture_Instance = new Texture;
        return Texture_Instance;
    }
    return Texture_Instance;
}
Тоже самое в GameOBJ только там вместо Texture стоит GameOBJ

Так вот, из класса Game я вызываю:
C++
1
2
3
4
void Game::PushGameObj()
{
    GameOBJ::Instance()->Push_Objects("test.png","test");
}
Который в свою очередь идёт в:
C++
1
2
3
4
5
void GameOBJ::Push_Objects(std::string Texture_P,std::string ID)
{
    Texture::Instance()->LoadSurface(Texture_P);
    Texture::Instance()->PushTexture(ID);
}
И который идёт в:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool Texture::LoadSurface(std::string Path)
{
    Texture_Surface = IMG_Load(Path.c_str());
    if (Texture_Surface == nullptr)
    {
        std::cerr << "Could not create surface because of Img_GetError =  " << IMG_GetError << std::endl;
        Success = false;
    }
    else
    {
        std::cout << "Success Creating Surface " << std::endl;
        Success = true;
    }
    return Success;
}
И в
C++
1
2
3
4
5
6
void Texture::PushTexture(std::string ID)
{
    Load::PushTexture(ID, Texture_Surface);
    SDL_FreeSurface(Texture_Surface);
    Texture_Surface = nullptr;
}
Проблема возможно или в
C++
1
SDL_Surface* Texture_Surface = nullptr;
Это находится в Texture.h в Private
Или в чём то другом.
Так вот вопрос, когда он заходит в метод LoadSurface и доходит до значения
C++
1
 Texture_Surface = IMG_Load(Path.c_str());
Появляется ошибка доступа, и This показывает NULL. В чём может заключатся проблема?
0
Миниатюры
Пустые указатели (ошибка доступа)   Пустые указатели (ошибка доступа)  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2014, 21:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Пустые указатели (ошибка доступа) (C++):

Стек через указатели — ошибка доступа - C++
Задача такова: реализовать стек, в котором будут такие команды — push (добавить в конец элемент), pop (удалить последний элемент), back...

Указатели в файлах прямого доступа - C++
Доброго времени суток имею следующее: FILE *fp; int m={1,2,3,4,5,6,7,8,9,10}; long int g; if((fp=fopen(&quot;test&quot;,...

Нарушение прав доступа при чтении по адресу, указатели - C++
Доброго времени суток, дорогие форумчане! Проблема в следующем: мне дано было задание сделать игру Го(кто не знает это что-то вроде...

Указатели и указатели на указатели, а также типы данных - C++
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно. Накачал литературы, буду изучать) Щас...

Указатели. В чем ошибка??? - C++
Здравствуйте! Не могу разобраться, как исправить такую error: error C2061: syntax error : identifier '_TCHAR' Вот код программы: ...

Ошибка компиляции (указатели) - C++
#include &lt;iostream&gt; using namespace std; int main () { int a; int *b; int c;

5
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
08.08.2014, 21:56  [ТС] #2
Проблему решил, когда повнимательнее поглядел на код, там где
C++
1
2
3
4
5
6
7
8
9
Texture* Texture::Instance()
{
    if (Texture_Instance = nullptr)
    {
        Texture_Instance = new Texture;
        return Texture_Instance;
    }
    return Texture_Instance;
}
Вместо двух знака равенства я написал 1 и это вызвало ошибку пустого указателя!
0
DrOffset
7351 / 4451 / 1009
Регистрация: 30.01.2014
Сообщений: 7,292
09.08.2014, 01:16 #3
Progers, добавлю просто к сведению. Лучше не использовать new в синглтонах - используй static (a la mayers singleton). Особенно в свете гарантий С++11 насчет static.
1
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
09.08.2014, 13:35  [ТС] #4
DrOffset, Хорошо, спасибо!
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 692
Записей в блоге: 1
09.08.2014, 15:16 #5
Цитата Сообщение от Progers Посмотреть сообщение
Texture_Instance = nullptr
Это просто опечатка?
0
Progers
New to C++
83 / 44 / 5
Регистрация: 14.01.2013
Сообщений: 258
09.08.2014, 16:16  [ТС] #6
Цитата Сообщение от CyberSolver Посмотреть сообщение
Это просто опечатка?
Почему опечатка? Всё нормально там.

Добавлено через 59 секунд
Цитата Сообщение от CyberSolver Посмотреть сообщение
Это просто опечатка?
А извиняюсь, да эта была ошибка, но я её ещё вчера заметил
0
09.08.2014, 16:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.08.2014, 16:16
Привет! Вот еще темы с ответами:

указатели ошибка в синтаксисе - C++
#include &lt;iostream&gt; using namespace std; int main(){ int i=5; int *a; a=i;// Тут ошибка помогите плиз=( ...

указатели,вроде ошибка в книге - C++
снова ошибка в книге снова разочаровние...=\ вот код #include &lt;windows.h&gt; #include&lt;iostream&gt; using namespace std; int main(){ ...

ошибка с передачей через указатели - C++
Подскажите в чем ошибка // dynmas_var15_1semestr.cpp: главный файл проекта. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

В чем ошибка? (Строки. Массивы. Указатели) - C++
Всем добрый вечер. Объясните пожалуйста в чём ошибка в строке с коментарием &quot;ошибка&quot; ? class CMyString{ char *pStr; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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