Мне нужна помощь в определении ошибки во время выполнения std

#c

Вопрос:

Таким образом, приведенный выше вопрос в значительной степени объясняет мою проблему, у меня есть программа, которая печатает размер кода моего шейдера фрагментов и шейдера вершин, это часть моего проекта игрового движка, над которым я работал в течение последних нескольких дней в качестве учебного опыта, чтобы получить больше знаний о программировании на C низкого уровня, но проблема в том, что когда я перечисляю, где в проекте размещены оба шейдера, моя программа аварийно завершается утечкой памяти, мне нужен ответ, почему именно это происходит

трубопровод.h:

 #include lt;iostreamgt; #include lt;vectorgt; namespace G_piplne {  class EdtrPipeLine  {  public:   //grabs the file path to the frag file of the glsl shader file  EdtrPipeLine(const std::stringamp; vertFilePath, const std::stringamp; fragFilePath);   private:   //gets the file path of both the frag file and vert file  static std::vectorlt;chargt; readFile(const std::stringamp; filepath);   //grabs the file path to the vert file of the glsl shader file  void createGraphicsPipeLine(const std::stringamp; vertFilePath, const std::stringamp; fragFilePath);             }; }  

PipeLine.cpp используется для инициализации функций в заголовочном файле конвейера

 #include "shaders_h/PipeLine.h" #include lt;fstreamgt; #include lt;stdexceptgt;  namespace G_piplne {   EdtrPipeLine::EdtrPipeLine(const std::stringamp; vertFilePath, const std::stringamp; fragFilePath)   {  createGraphicsPipeLine(vertFilePath, fragFilePath);  }   std::vectorlt;chargt; EdtrPipeLine::readFile(const std::stringamp; filepath)  {  std::ifstream file(filepath, std::ios::ate | std::ios::binary);   if (!file.is_open())   {  throw std::runtime_error("failed to open file: "   filepath);  }   size_t filesize = static_castlt;size_tgt;(file.tellg());  std::vectorlt;chargt; buffer(filesize);   file.seekg(0);  file.read(buffer.data(), filesize);   file.close();  return buffer;       }   void EdtrPipeLine::createGraphicsPipeLine(const std::stringamp; vertFilePath, const std::stringamp; fragFilePath)  {  //Reads Frag and Vert Code Size  auto vertCode = readFile(vertFilePath);  auto fragCode = readFile(fragFilePath);   //Prints Frag and Vert Code Size  std::cout lt;lt; "Vertex Shader Code Size: " lt;lt; vertCode.size() lt;lt; "n";  std::cout lt;lt; "Frag Shader Code Size: " lt;lt; fragCode.size() lt;lt; "n";   } }  

and finally, the EditorConfigWindow header file which uses the function to display my vert and frag code size

 #pragma once  #include "EditorWindow.h" #include "../shaders_h/PipeLine.h"  namespace G_editor  {   class EditorWindowConfig  {  public:  //Init Varibles for the size of the Editor Window  static constexpr int WIDTH = 800;  static constexpr int HEIGHT = 600;    void run();   private:  //init Window with name GPRPG  EditorWindow editorWindow{ WIDTH, HEIGHT, "GPRPG" };   //Display vert and frag code size  G_piplne::EdtrPipeLine edtrPipeLine{"../../Shaders/simpleShader.vert.spv ", "../../Shaders/simpleShader.frag.spv"};   };  }   

Все файлы шейдеров находятся в нужном месте и перечислены правильно, я дважды проверил имена, и они также верны, ошибка указана ниже

Необработанное исключение в 0x00007FF8F0154F69 в GPRPG.exe: Исключение Microsoft C : std::ошибка runtime_error в ячейке памяти 0x00000064240FEEA8.

эта ошибка возникает в точке останова прямо при вызове функции createGraphicsPipeLine из файла заголовка EditorWindowConfig, я пытался перемещать файлы шейдеров в проекте, но это приводит к той же проблеме, заранее благодарю вас за любую помощь, которая может указать мне правильное направление для решения этой проблемы

Комментарии:

1. Сбои-это не утечки памяти. Утечка памяти возникает, если вы выделяете память (например new , с помощью), но не освобождаете ее (с delete помощью ).

2. Хорошо… это ошибка, но это не сильно меняет мой вопрос, мне нужна помощь с указанной выше ошибкой.

3. вы пробовали использовать отладчик для перехвата исключения? Или добавление обработчика исключений в ваш код для печати сообщения об исключении? Я почти уверен, что это ваша собственная ошибка во время выполнения, которая возникает.

4. Ваша программа выдает ошибку во время выполнения, если файл не открывается. Убедитесь, что файл существует и у вашей программы есть разрешение на его открытие ( например , он не заблокирован для чтения из-за того, что открыт в каком-либо текстовом редакторе), и если это относительный путь, проверьте, что рабочий каталог является тем, что вы думаете.

5. Вы выдаете ошибку во время выполнения, если не удается открыть файл….

Ответ №1:

В ходе исследования я обнаружил, что добавление абсолютного пути к моему файлу шейдера фактически выводит размер, как и ожидалось, программе по какой-то причине не понравился короткий путь, который я вводил