[英]How to properly delete the char array allocated with a new[] in a char * func()?
该函数正在将文本文件读入char缓冲区,并将指针返回该缓冲区。
char * textfile_to_char(wchar_t *filename)
{
WIN32_FIND_DATA data;
if (FindFirstFile(filename,&data)==INVALID_HANDLE_VALUE)
{
wchar_t message[256];
wsprintf(message,L"File could not be found %lp",filename);
MessageBox(0,message,0,0);
return NULL;
}
else
{
HANDLE hFile=CreateFile(filename,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY,0);
if (hFile==INVALID_HANDLE_VALUE)
{
wchar_t message[256];
wsprintf(message,L"Error opening file: %lp",filename);
MessageBox(0,message,0,0);
return NULL;
}
else
{
OVERLAPPED overlapped;
memset(&overlapped,0,sizeof(overlapped));
char * buffer=new char[data.nFileSizeLow];
ReadFileEx(hFile,buffer,data.nFileSizeLow,&overlapped,0);
CloseHandle(hFile);
buffer[data.nFileSizeLow]=0;
return buffer;
}
}
}
现在这里是另外一小段代码,我在其中使用此功能从此文本中获取openGl着色器
wchar_t filename[512];
wsprintf(filename,L"%s.vtx",_shader_name);
id_vertex_shader=glCreateShader(GL_VERTEX_SHADER);
id_fragment_shader=glCreateShader(GL_FRAGMENT_SHADER);
char *shader_source=textfile_to_char(filename);
char *buffers[2]={shader_source,0};
glShaderSource(id_vertex_shader,1,buffers,0);
delete[] shader_source;
glCompileShader(id_vertex_shader);
和delete [] shader_source实际上让我感到困惑,因为a)无效,b)delete shader_source也无效。 那我怎么删除它?
您进行异步读取,然后期望它立即读取,然后删除文件句柄
将readFileEx和CloseHandle添加到GetOverlappedResult的调用:
ReadFileEx(hFile,buffer,data.nFileSizeLow,&overlapped,0);
WORD bytesRead;
if(!GetOverlappedResult(hFile, &overlapped, &bytesRead, TRUE);){
//check error and such
}
CloseHandle(hFile);
buffer[bytesRead]=0;
或仅使用ReadFile而不使用OVERLAPPED结构:
WORD bytesRead;
ReadFile(hFile,buffer,data.nFileSizeLow,&bytesRead,0);
CloseHandle(hFile);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.