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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

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

25.07.2013, 16:50. Просмотров 1112. Ответов 25
Метки нет (Все метки)

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; (C++):

Ошибка bad ptr при возвращении занчения из функции - C++
Помогите по функции, не возвращает значения, вот как объявлена функция и вот как пытаюсь вызвать чтобы получить значение этой самой функции...

bad ptr - C++
Здравствуйте! Пишу небольшую программу для работы с текстом. При substr'е куска строки вывелся не только нужный мне кусок, но и немного...

Неверно работает код *ptr++ = *ptr2++ - C++
Собственно столкнулся со следующей проблемой, код выглядит так: #include &lt;iostream&gt; using std::cout; using std::endl; int...

Значение указателей (*ptr.) на пустые ячейки памяти - C++
Здравствуйте, уважаемые форумчане! С началом изучения С++ стало возникать множество вопросов. Когда резервируется свободная память...

Как динамически обьявить многомерный массив (ptr = new int[5][5])? - C++
как обявить вот такую вот штуку: int * ptr = new int; заранее благодарен Роман.

Что означает строка: CString &ptr = Text; ? - C++
Помогите please! Что означает строка: CString &amp;ptr = Text; Text определена выше, как: CString Text;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
26.07.2013, 16:33     Ошибка на стадии выполнения ptr = ptr;
  #16

Не по теме:

vbloodv, Я вроде под пункты не попадаю, посему спрошу тут нафига тащится весь буст + локи, если используется только booot::lexical_cast?

alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 17:07 #17
У меня boost нет.
Croessmah
Модератор
Эксперт CЭксперт С++
13147 / 7410 / 830
Регистрация: 27.09.2012
Сообщений: 18,243
Записей в блоге: 3
Завершенные тесты: 1
26.07.2013, 17:09 #18
Цитата Сообщение от alsav22 Посмотреть сообщение
У меня boost нет.
Ну у меня как бы тоже, но есть Inc/boost в архиве с проектом )))
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 18:27 #19
У меня проект не компилируется, пэтому проверить не смогу.
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
26.07.2013, 19:09  [ТС] #20

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
vbloodv, Я вроде под пункты не попадаю, посему спрошу тут нафига тащится весь буст + локи, если используется только booot::lexical_cast?
В перспективе, раньше были shared_ptr, но я во время ошибки ptr = ptr избавился от них, фабрика на локе будет и одиночка. Я не заботился о оптимизации перед тем как выложить его в открытом...


По поводу тащить весь boost, у меня весь boost не прицеплен, я через bcp извлек только то что мне будет необходимо...
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 21:30 #21
С этой ошибкой понятно (в WinMain.cpp):
C++
1
2
3
4
CParser * parser;
...
parser->LoadFromEcad(object, L"cube.ecad");
...
А объект под указатель где создаётся?
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.07.2013, 21:45 #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
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
26.07.2013, 23:38  [ТС] #23
Цитата Сообщение от alsav22 Посмотреть сообщение
С этой ошибкой понятно (в WinMain.cpp):
КРАСАВЧИК, стыдно, но как говорят на форуме, "про слона, то и забыли".
Спасибо, возможно на код стоило взглянуть не замыленным взором.

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

Unique ptr в классе - C++
Добрый вечер, есть ли реальное решение придерживаться правилу нуля и иметь в классе std::unique_ptr ?

На стадии выполнения выпадает исключение: найти причины и исправить ошибку - C++
Добрый день. Имеется следующая проблема. Visual studio 2017. #include &lt;iostream&gt; #include &lt;string&gt; struct patrons { std::string...

Укажите где ошибка (ошибка во время выполнения программы) - C++
Здравствуйте, помогите пожалуйста найти ошибки в коде которые возникаю при выполнении программы Картинка с ошибкой внизу поста. Код: ...

Ошибки на стадии линковки - C++
obj\Release\main2.o:main2.cpp|| undefined reference to `__gxx_personality_sj0'| obj\Release\main2.o:main2.cpp|| undefined reference to...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.07.2013, 02:36
Ответ Создать тему
Опции темы

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