時不分配我有以下代碼:字符串訪問
// 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