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

Ошибка на стадии выполнения ptr = ptr; - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
25.07.2013, 16:50     Ошибка на стадии выполнения ptr = ptr; #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class CObject
{
friend Parser;
// много полей методов, все должны заполняться в парсере
}
 
class Parser
{
CObject * object_
public:
    void CParser::LoadFromEcad(CObject * object, const std::wstring & path)
    {
        object_ = object; //  Тут происходит ошибка
    }
}
C++
1
2
3
4
5
6
7
Foo * soldat;
int main()
{
   CParser * parser = new CParser;
   CObject * object = new CObject;
   parser->LoadFromEcad(object,L"blabla.ecad");
}
Сообщение об ошибке:
Кликните здесь для просмотра всего текста
Unhandled exception at 0x777415de in ecad.exe 0xC00000005: Access violation writing location 0x0000004.

Заголовочный файл парсера и код вызываемой функции:
Кликните здесь для просмотра всего текста

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
#pragma once
#pragma comment( lib, "shlwapi.lib" )
 
#include <Windows.h>
#include <Shlwapi.h>
#include <io.h>
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <vector>
#include <string>
#include "userfn.h"
#include "usertypes.h"
#include "engine/Object.h"
 
class CParser
{
    CObject * object_;
    static std::wstring type_parsing[7];
public:
    void LoadFromEcad(CObject * object, const std::wstring & path);
private:
    bool IsFileExist(const std::wstring & file_path);
    void IndexParse(std::ifstream & file_stream, std::string & tmp);
    void VertexParse(std::ifstream & file_stream, std::string & tmp);
    void DiffuseParse(std::ifstream & file_stream, std::string & tmp);
    void AmbientParse(std::ifstream & file_stream, std::string & tmp);
    
};
void CParser::LoadFromEcad(CObject * object, const std::wstring & path )
{
    if (IsFileExist(path))
    {
        object_ = object; // ВОТ ОНА ОШИБКА
        std::ifstream file_stream( path.c_str() );
        std::string tmp;
        file_stream >> tmp;
        if ( tmp == "START" )
            while (tmp != "END")
            {
                file_stream >> tmp;
                VertexParse(file_stream,tmp);
                IndexParse(file_stream,tmp);
                DiffuseParse(file_stream,tmp);
                AmbientParse(file_stream,tmp);
            }
        file_stream.close();
    }
    else
    {
        // InitEmptyObject();
    }
}

Пожалуйста если кто-то знает почему такая ошибка возникает чаще всего или возникала у вас, прошу сообщить тоже...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2013, 16:50     Ошибка на стадии выполнения ptr = ptr;
Посмотрите здесь:

bad ptr C++
C++ Неверно работает код *ptr++ = *ptr2++
C++ Как динамически обьявтиь многомерный масив (ptr = new int[5][5])?
C++ Что означает строка: CString &ptr = Text; ?
C++ Значение указателей (*ptr.) на пустые ячейки памяти
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 21:30     Ошибка на стадии выполнения ptr = ptr; #21
С этой ошибкой понятно (в WinMain.cpp):
C++
1
2
3
4
CParser * parser;
...
parser->LoadFromEcad(object, L"cube.ecad");
...
А объект под указатель где создаётся?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 21:45     Ошибка на стадии выполнения ptr = ptr; #22
Добавить:
C++
1
parser = new CParser();
И пути к файлам мне пришлось по другому прописать:
C++
1
2
3
parser->LoadFromEcad(object, L"bin\\model\\cube.ecad");
object->LoadObjectFromECAD("bin\\model\\cube.ecad");
object2->LoadObjectFromECAD("bin\\model\\cube.ecad");
Миниатюры
Ошибка на стадии выполнения ptr = ptr;  
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
26.07.2013, 23:38  [ТС]     Ошибка на стадии выполнения ptr = ptr; #23
Цитата Сообщение от alsav22 Посмотреть сообщение
С этой ошибкой понятно (в WinMain.cpp):
КРАСАВЧИК, стыдно, но как говорят на форуме, "про слона, то и забыли".
Спасибо, возможно на код стоило взглянуть не замыленным взором.

Цитата Сообщение от alsav22 Посмотреть сообщение
И пути к файлам мне пришлось по другому прописать:
По этому поводу, не знаю вроде в debug прописана Working director $(ProjectDir)\bin, НО "bin\\model\\cube.ecad" - это работает. Если примерно, представляешь, почему путь надо задавать относительно $(ProjectDir) прошу подскажи...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 23:54     Ошибка на стадии выполнения ptr = ptr; #24
Цитата Сообщение от vbloodv Посмотреть сообщение
почему путь надо задавать относительно $(ProjectDir)
Наверное потому, что в студии, по умолчанию, файлы ищутся в папке проекта. Можно поместить cube.ecad в папку проекта и писать где нужно просто имя файла:
C++
1
object->LoadObjectFromECAD("cube.ecad");
vbloodv
 Аватар для vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
27.07.2013, 01:25  [ТС]     Ошибка на стадии выполнения ptr = ptr; #25
Цитата Сообщение от alsav22 Посмотреть сообщение
Наверное потому, что в студии, по умолчанию, файлы ищутся в папке проекта. Можно поместить cube.ecad в папку проекта и писать где нужно просто имя файла:
Это конечно так, но структура плохая получается и неудобоваримая, хотелось бы профессиональней как-то есть догадка что я $(ProjectDir)bin неправильно написал... Попробую За HardCode'жить на полные пути и перепроверить...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2013, 02:36     Ошибка на стадии выполнения ptr = ptr;
Еще ссылки по теме:

Ошибки на стадии линковки C++
C++ Укажите где ошибка (ошибка во время выполнения программы)
Трудности на начальной стадии C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.07.2013, 02:36     Ошибка на стадии выполнения ptr = ptr; #26
Цитата Сообщение от vbloodv Посмотреть сообщение
есть догадка что я $(ProjectDir)bin неправильно написал...
По-моему, всё там правильно, установки там не влияют на то, где файлы для открытия будут искаться($(ProjectDir)\bin\ - это где .exe будет, $(ProjectDir)intermediate \ - это где .obj будут). Путь к файлу нужно правильно указывать: или полный, или относительно папки проекта.
Yandex
Объявления
27.07.2013, 02:36     Ошибка на стадии выполнения ptr = ptr;
Ответ Создать тему
Опции темы

Текущее время: 13:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru