From: Stephan A. <sup...@gm...> - 2019-06-12 21:39:52
|
Hi, you are pointing member variables of the Plot class to a bunch of temporary variables (allocated on the stack). These go out of scope when the constructor is finished, and then the member variables point to invalid objects (they have been deallocated). You need to declare all the variables you need in the constructor as members of the Plot class. No objects of the „pipeline“ should be temporary. Best regards, Stephan > Am 12.06.2019 um 21:43 schrieb KarthikRIyer <Kar...@ya...>: > > Hi, > > I want to initialize the buffer that I want to use inside a constructor. But > doing that is giving me a segmentation fault as follows when run using gdb: > > Program received signal SIGSEGV, Segmentation fault. > 0x0000555555588680 in agg::blender_rgb<agg::rgba8, > agg::order_rgb>::blend_pix (p=0x264d4b42129b <error: Cannot access memory at > address 0x264d4b42129b>, cr=0, cg=0, cb=0, alpha=34, cover=34) > at /home/karthik/swiftplot/framework/AGG/include/agg_pixfmt_rgb.h:91 > 91 p[Order::R] += (value_type)(((cr - p[Order::R]) * alpha) >> > base_shift); > > > But everything works fine when I initialize it in the class directly. > > Here's the initializing part of the code: > > class Plot{ > > public: > agg::rasterizer_scanline_aa<> m_ras; > agg::scanline_p8 m_sl_p8; > agg::line_cap_e roundCap = agg::round_cap; > renderer_aa ren_aa; > int pngBufferSize = 0; > > unsigned char* buffer; > > > agg::int8u* m_pattern; > agg::rendering_buffer m_pattern_rbuf; > renderer_base_pre rb_pre; > > Plot(float width, float height, float subW, float subH){ > frame_width = width; > frame_height = height; > sub_width = subW; > sub_height = subH; > buffer = new unsigned char[frame_width*frame_height*3]; > agg::rendering_buffer rbuf = agg::rendering_buffer(buffer, > frame_width, frame_height, -frame_width*3); > pixfmt pixf = pixfmt(rbuf); > renderer_base rb = renderer_base(pixf); > ren_aa = renderer_aa(rb); > pixfmt_pre pixf_pre(rbuf); > rb_pre = renderer_base_pre(pixf_pre); > } > > How can I solve this? I need to set the buffer size in the constructor so > that the end user can choose he size of the image he/she wants. > > Thanks, > Karthik > > > > > -- > Sent from: http://anti-grain-geometry.1086185.n5.nabble.com/ > > > _______________________________________________ > Vector-agg-general mailing list > Vec...@li... > https://lists.sourceforge.net/lists/listinfo/vector-agg-general |