3

これはしばらくの間私を悩ませてきました。この関数は戻りさえせず、単にセグメンテーション違反を起こします。正しいファイルの場所を指定し、関数内のすべての可能なポイントでエラーをチェックしますが、わかりませんか?

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);
}
4

2 に答える 2

9
buff[len + 1] = '\0';

する必要があります:

buff[len] = '\0';

配列にlen + 1要素があり、最後の要素はインデックスにありますlen

于 2012-10-09T22:29:59.297 に答える
2

fopenは動作しconst char*ませんconst GLchar*

また、buff[len+1] = '\0';する必要がありますbuff[len] = '\0';

于 2012-10-09T22:30:00.857 に答える