My program which is an OpenGL program compiles and runs fine when i dont use memcopy, but when this function is used in the program it gives me a seg fault when i try to run the program after compilation, it still compiles in both cases but gives me the seg fault when i compile the program with this function, and the seg fault when checked in gdb does not show memcpy as the problem but an initialization function init() which creates the opengl context for me, but the weird thing is that it only happens when i include memcpy in the program and compile it, otherwise init() works fine , i also tested it in another file to confirm that it works on its own
I dont know why it is doing it, i did notice that this has happened since linux mint upgraded some packages, the program worked fine before the upgrade
here is the program source code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <GL/glew.h>
#include <GL/glx.h>
#include <time.h>
#include <math.h>
#include "glx2.c"
#include "renderBuffer.h"
#include "new.hpp"
#define WIDTH 1080
#define HEIGHT 720
int main(){
init(WIDTH,HEIGHT);
createShaders();
char name[1][25];
float returned[720][1080][2] = {0.0f};
strcpy(name[0],"ryu2.bmp");
GLuint frameBuffer = createFramebuffer(frameBuffer);
GLuint renderTexture = createRenderTexture(renderTexture, WIDTH,HEIGHT);
//GLuint depth_texture;
//glGenTextures(1, &depth_texture);
//glBindTexture(GL_TEXTURE_2D, depth_texture);
//glTexStorage2D(GL_TEXTURE_2D, 1, GL_DEPTH_COMPONENT32F, 1080, 720);
//glFramebufferTexture(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,depth_texture, 0);
glFramebufferTexture(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,renderTexture,0);
static const GLenum draw_buffers[] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, draw_buffers);
//bind framebuffer
glBindFramebuffer(GL_FRAMEBUFFER,frameBuffer);
checkFramebuffer();
GLfloat vertices[] = {
//
// X Y U V
//triangle 1
-1.0, -1.0, 0.0, 0.0,
-22.0/27.0, -1.0, 100.0/800.0, 0.0,
-1.0, -41.0/60.0, 0.0, 114.0/342.0,
-22.0/27.0, -41.0/60.0, 100.0/800.0, 114.0/342.0};
GLuint vao1 = createVao();
GLuint vbo1 = createVbo();
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
GLuint tex = createTexture(name[0]);
//set up data format in opengl and save in vao
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), 0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*sizeof(GLfloat), (const GLvoid*)(2 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
bindObject(vao1, tex);
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer);
glViewport(0,0, WIDTH,HEIGHT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
//////completed drawing to framebuffer original values
glBindFramebuffer(GL_FRAMEBUFFER,0);
glBindTexture(GL_TEXTURE_2D, renderTexture);
glGetTexImage(GL_TEXTURE_2D, 0,GL_RG,GL_FLOAT,(void *)&returned);
float another[720][1080][2];
memcpy((void *)another, (const void *)returned, sizeof(returned));
//----------------------completed copying original values to array for all comparison
int i = 0,j=0;
//for(j=0; j<114;j++)
// for(i=0; i<100;i++){
//printf("%f %f\n",another[j][i][0], another[j][i][1]);
//}
//from this point on there will be change and comparison
//GLuint disp = glGetUniformLocation(shader_program, "disp");
//glUniform2f(disp, 1.0/540,1.0/360);
glXMakeCurrent( dpy, 0, 0 );
glXDestroyContext( dpy, ctx );
glXDestroyWindow(dpy, glxWin);
XDestroyWindow( dpy, win );
XFreeColormap( dpy, cmap );
XCloseDisplay( dpy );
return 0;
}
when i run gdb this is the problem it gives , despite that when i comment out memcpy it works fine and doesnt give me any seg faults
Program received signal SIGSEGV, Segmentation fault.
0x0000000000402876 in main () at untitled.cpp:22
22 init(WIDTH,HEIGHT);
(gdb)