在nvidia-340-updates中获取分段错误 我有点在学习C++中的SDL OpenGL(我的错误),我不得不把它移植到C。因为C++对我来说有点混淆(BTW.是的,我可以在网上搜索一个函数替代)。所以运行这个给了我一个错误,在英伟达驱动程序中(BWT.卡是GEFECUM 105M)。这是我的错误还是驱动程序中的错误(我认为它是我的,因为它上的每一个游戏看起来都很好)?p>

在nvidia-340-updates中获取分段错误 我有点在学习C++中的SDL OpenGL(我的错误),我不得不把它移植到C。因为C++对我来说有点混淆(BTW.是的,我可以在网上搜索一个函数替代)。所以运行这个给了我一个错误,在英伟达驱动程序中(BWT.卡是GEFECUM 105M)。这是我的错误还是驱动程序中的错误(我认为它是我的,因为它上的每一个游戏看起来都很好)?p>,c,linux,opengl,glsl,nvidia,C,Linux,Opengl,Glsl,Nvidia,以下是gdb的回溯: Program received signal SIGSEGV, Segmentation fault. strlen () at ../sysdeps/x86_64/strlen.S:106 106 ../sysdeps/x86_64/strlen.S: No such file or directory. (gdb) bt #0 strlen () at ../sysdeps/x86_64/strlen.S:106 #1 0x00007ffff59cf699 in

以下是gdb的回溯:

Program received signal SIGSEGV, Segmentation fault.
strlen () at ../sysdeps/x86_64/strlen.S:106
106 ../sysdeps/x86_64/strlen.S: No such file or directory.
(gdb) bt
#0  strlen () at ../sysdeps/x86_64/strlen.S:106
#1  0x00007ffff59cf699 in ?? ()
   from /usr/lib/nvidia-340-updates/libnvidia-glcore.so.340.76
#2  0x00007ffff59d1d89 in ?? ()
   from /usr/lib/nvidia-340-updates/libnvidia-glcore.so.340.76
#3  0x0000000000401f86 in compileShader ()
#4  0x0000000000401ca6 in compileShaders ()
#5  0x00000000004018b9 in initShaders ()
#6  0x0000000000401a02 in Initilize ()
#7  0x00000000004015ae in main ()
这里是compileShader func(我不会完整编写代码,因为它太长了;),如果您愿意,我仍然可以发布它):


这是代码中的一个bug

您给驱动程序的
fileContents
指针完全无效,因此在取消引用此指针时驱动程序崩溃

在C中没有本机字符串数据类型,只需使用
char
数组即可。C不会为你做任何类型的内存管理。因此,char指针上的+=运算符不进行字符串连接。这只是指针算法。内存中只有一个emoty字符串,并且
fileContent
最初指向它。按部就班

fileContents += symbol;
将指针的数值增加
symbol
,从而指向空字符串之外的内存


我不想听起来粗鲁,所以请不要误会我。但我真的建议您在继续使用OpenGL之前,先学习要使用的编程语言。

这是您代码中的一个错误

您给驱动程序的
fileContents
指针完全无效,因此在取消引用此指针时驱动程序崩溃

在C中没有本机字符串数据类型,只需使用
char
数组即可。C不会为你做任何类型的内存管理。因此,char指针上的+=运算符不进行字符串连接。这只是指针算法。内存中只有一个emoty字符串,并且
fileContent
最初指向它。按部就班

fileContents += symbol;
将指针的数值增加
symbol
,从而指向空字符串之外的内存


我不想听起来粗鲁,所以请不要误会我。但我真的建议您在继续使用OpenGL之前,先学习要使用的编程语言。

这是您代码中的一个错误

您给驱动程序的
fileContents
指针完全无效,因此在取消引用此指针时驱动程序崩溃

在C中没有本机字符串数据类型,只需使用
char
数组即可。C不会为你做任何类型的内存管理。因此,char指针上的+=运算符不进行字符串连接。这只是指针算法。内存中只有一个emoty字符串,并且
fileContent
最初指向它。按部就班

fileContents += symbol;
将指针的数值增加
symbol
,从而指向空字符串之外的内存


我不想听起来粗鲁,所以请不要误会我。但我真的建议您在继续使用OpenGL之前,先学习要使用的编程语言。

这是您代码中的一个错误

您给驱动程序的
fileContents
指针完全无效,因此在取消引用此指针时驱动程序崩溃

在C中没有本机字符串数据类型,只需使用
char
数组即可。C不会为你做任何类型的内存管理。因此,char指针上的+=运算符不进行字符串连接。这只是指针算法。内存中只有一个emoty字符串,并且
fileContent
最初指向它。按部就班

fileContents += symbol;
将指针的数值增加
symbol
,从而指向空字符串之外的内存


我不想听起来粗鲁,所以请不要误会我。但我真的建议您在继续使用OpenGL之前,先学习想要使用的编程语言。

fileContents+=symbol
-
fileContents
是一个
char*
;不是
std::string
;这不是C++;这不会“添加”任何文件内容。您正在将指针地址移动到无效值;没有附加数据。读取的数据没有存储在任何位置。随后使用该指针自然会调用未定义的行为。谢谢,我认为它不是C。所以我替换了它。我理解这一点。我最后一个评论的意思是:< C++ >代码>代码> char *不会像<代码> STD::String < /C> >或其他类似的容器在C++中运行。他们几乎在各个方面都有根本的不同。你的端口的那一部分完全坏了。在SO和web上有很多关于如何使用C结构加载具有文件内容的动态大小缓冲区的示例。我劝你把它们找出来。更好的是,学习C++并使用原来的库,因为它是用来使用的。这里有一组主旨,用于从文件中加载着色器:<代码>文件内容+ =符号;
-
fileContents
是一个
char*
;不是
std::string
;这不是C++;这不会“添加”任何文件内容。您正在将指针地址移动到无效值;没有附加数据。读取的数据没有存储在任何位置。随后使用该指针自然会调用未定义的行为。谢谢,我认为它不是C。所以我替换了它。我理解这一点。我最后一个评论的意思是:< C++ >代码>代码> char *不会像<代码> STD::String < /C> >或其他类似的容器在C++中运行。他们几乎在各个方面都有根本的不同。你的端口的那一部分完全坏了。在SO和web上有很多关于如何使用C结构加载具有文件内容的动态大小缓冲区的示例。我劝你去找他们