- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的程序是一个 OpenGL 程序,当我不使用 memcopy 时编译和运行良好,但是当在程序中使用这个函数时,当我尝试在编译后运行程序时它给我一个段错误,它仍然编译案例,但是当我用这个函数编译程序时给我 seg 错误,并且在 gdb 中检查时的 seg 错误没有显示 memcpy 作为问题而是一个初始化函数 init() 为我创建了 opengl 上下文,但奇怪的是是只有当我在程序中包含 memcpy 并编译它时才会发生,否则 init() 工作正常,我还在另一个文件中测试它以确认它自己工作
我不知道为什么会这样,我确实注意到自从 linux mint 升级了一些软件包后就发生了这种情况,程序在升级前运行良好
这是程序源码
#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;
}
当我运行 gdb 时,这是它给出的问题,尽管当我注释掉 memcpy 时它工作正常并且没有给我任何段错误
Program received signal SIGSEGV, Segmentation fault.
0x0000000000402876 in main () at untitled.cpp:22
22 init(WIDTH,HEIGHT);
(gdb)
最佳答案
@BarmakShemirani 指出的答案是 linux 的堆栈限制为 8mb,并且由于两个数组加在一起超过 12mb,因此会覆盖堆栈,因此问题发生在我身上,解决方案是写入/用 malloc() 代替分配给堆
关于c++ - memcpy() 给我段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37760004/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!