前提・実現したいこと
コンピュータシステムの理論と実装の本を参考にc++を用いて、簡単なassemblerを作っています。
int main()のなかでアセンブリファイルを開き構文解析を行い、writing_file<<acombin<<endl;やwriting_file<<ccombin<<endl;でバイナリファイルへと書き込んでいます。コンパイルはできたのですが、実行すると以下のエラーが出てしまい詰まっています。
発生している問題・エラーメッセージ
terminate called after throwing an instance of 'std::logic_error' what(): basic_string::_M_construct null not valid Abort trap: 6
該当のソースコード
C++
1#include "./Code.hpp" 2#include "./Parser.hpp" 3#include <bits/stdc++.h> 4using namespace std; 5 6const string A = "A_COMMAND"; 7const string C = "C_COMMAND"; 8const string L = "L_COMMAND"; 9 10 11int binary(int bina){ 12 int ans = 0; 13 for (int i = 0; bina>0 ; i++) 14 { 15 ans = ans+(bina%2)*pow(10,i); 16 bina = bina/2; 17 } 18 return ans; 19} 20 21int main(int argc, char *argv[]){ 22 string filename_asm = argv[0]; 23 string filename_hack = argv[1]; 24 25 ofstream writing_file; 26 Parser parser(filename_asm); 27 writing_file.open(filename_hack, ios::binary); 28 29 for (int i = 0; i<parser.comSet.size(); i++){ 30 string commandtype = parser.commandType(); 31 if(commandtype==A||commandtype==L){ 32 string symbol10 = parser.symbol(); 33 string symbol2 = to_string(binary(stoi(symbol10))); 34 bitset<16> acombin(symbol2); 35 writing_file<<acombin<<endl; 36 } 37 else{ 38 string sdest=parser.dest(); 39 string scomp=parser.comp(); 40 string sjump=parser.jump(); 41 Code code(sdest,scomp,sjump); 42 string sdestbin = code.destbin(); 43 string scompbin = code.compbin(); 44 string sjumpbin = code.jumpbin(); 45 string sccombin = "111"+sdestbin+scompbin+sjumpbin; 46 bitset<16> ccombin(sccombin); 47 writing_file<<ccombin<<endl; 48 } 49 parser.advance(); 50 } 51 52}
試したこと
色々と調べてみた結果stringにnullを代入することによるエラーだと思い、怪しいと思う箇所を修正してみたのですが、エラーのままで困っています。このエラーが出た原因はこの解釈でいいのか、またエラーが出てる可能性が高い場所などがわかれば教えていただきたいです。
補足情報(FW/ツールのバージョンなど)
エディタ:vscode