这让我困扰了一段时间;这个功能甚至没有返回,它只是段错误。我指定了一个正确的文件位置,我在函数的每个可能的点检查错误,我不明白?
GLchar* getShaderString(const GLchar* file_path){
FILE* srcfile = NULL;
if(!(srcfile = fopen(file_path, "r")))
return(NULL);
fseek(srcfile, 0l, SEEK_END);
long len;
if((len = ftell(srcfile)) == -1)
return (NULL);
fseek(srcfile, 0l, SEEK_SET);
GLchar* buff;
if(!(buff = malloc(len + 1)))
return (NULL);
fread((GLvoid*)buff, len, 1, srcfile);
fclose(srcfile);
buff[len + 1] = '\0';
return (buff);
}
答案 0 :(得分:9)
buff[len + 1] = '\0';
应该是:
buff[len] = '\0';
您的数组中有len + 1
个元素,最后一个元素位于索引len
。
答案 1 :(得分:2)
fopen适用于const char*
而不是const GLchar*
。
此外,buff[len+1] = '\0';
应为buff[len] = '\0';
。