如何在char*func()中正确删除用new[]分配的char数组
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[]shadersource实际上让我很困惑,因为a)它不起作用,b)delete shadersource也不起作用。那么我该如何删除它呢?感谢
您进行异步读取,然后期望它立即读取,然后删除文件句柄
添加对GetOverlappedResult的调用readFileEx和CloseHandle:
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);
相关文章:
- 为char数组调整zlib-zpipe
- char array[sizeof(Message)]; vs char* array = new char[sizeo
- 正在使用new char[]或malloc的结果来铸造float*是UB(严格的混叠冲突)
- 正确的语法以对 char* 数组使用 new
- "char *"和"char * = new char[]"之间的C++区别
- 分配给“char* x = new char[32]”的内存过多
- Heap corruption after new char[strlen
- 可能的内存泄漏:new char[strlen()]
- 如何在char*func()中正确删除用new[]分配的char数组
- 在动态分配中,在关键字new之前使用Why(unsigned char*)
- 为什么我不能用c = new (char*)[10]初始化char** c,而c = new char*[10]是可以的
- C++ delete[] on new char;
- 将字符串存储为char[],位置为new,并将其取回
- 操作符new(n)与new unsigned char[n]的位置new
- shared_ptr<void> t(new char[num]) 表示内存泄漏?
- New和delete char*会导致异常
- 当重载new操作符时,它不会为char指针分配内存
- "new char[]"是否需要手动释放资源?
- 当每个字符串由"new char[]"创建时,如何对"vector<string>"的元素调用"delete"?
- 为什么 ptrVec = new vector<const char*> 编译失败