时不分配我有以下代码:字符串访问
// Get characters of file
int numChars = 0;
while(fgetc(file) != EOF)
numChars++;
// Allocate memory for shader string
char * shaderString = malloc(numChars * sizeof(char));
// Rewind file to read in string
rewind(file);
// Read in file
while((*shaderString++ = fgetc(file)) != EOF);
printf("Shader to compile:\n%s\n", shaderString);
// Make shader
GLuint shader = glCreateShader(shaderType);
glShaderSource(shader, 1, &shaderString, NULL);
glCompileShader(shader);
printf("Shader compiled:\n%s\n", shaderString);
出于某种原因,该字符串shaderString
似乎并没有通过任何一种printf
或glShaderSource
电话访问。另一个有趣的事情是,当我尝试拨打free(shaderString)
时,出现无法分配内存的错误。通常,我在打印报表中没有任何内容,或者偶尔会遇到问号或随机文本,所以我觉得它一定是我错过的简单东西。如果我将puts(*(shaderString-1))
与指定字符串的while循环一起添加,它会尽可能打印着色器文件,但偶尔会随机使用OpenGL信息。
编辑:运行与LLDB代码后,我发现了shaderString
变量的内容是"ot foun\x05"
和"\x04\x01"
加载两个不同的文件,这似乎可能随着文件的末尾去的时候好像我从来没有所谓的rewind(file)
,但这并不能解释如何尝试puts(*(shaderString-1))
的工作原理。
为什么你想到的是'shaderString'仍然指向字符串的开头你增加了它? –
@ReetoKoradi我似乎忽略了这一点,但意识到它解决了我所遇到的主要问题。 – danielunderwood