Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么在读取文件的中途线程会挂起_C++_Nfs - Fatal编程技术网

C++ 为什么在读取文件的中途线程会挂起

C++ 为什么在读取文件的中途线程会挂起,c++,nfs,C++,Nfs,我有一个相当标准的循环来读取二进制文件: char* buffer; if(imageData.is_open()) { imageData.seekg(0, std::ios::end); int filelen = imageData.tellg(); entrysize = filelen/(hdrDimensions[0] * hdrDimensions[1] * hdrDimensions[2] * hdrDimensions[3]); buff

我有一个相当标准的循环来读取二进制文件:

char* buffer;    
if(imageData.is_open())
{
    imageData.seekg(0, std::ios::end);
    int filelen = imageData.tellg();
    entrysize = filelen/(hdrDimensions[0] * hdrDimensions[1] * hdrDimensions[2] * hdrDimensions[3]);
    buffer = new char[sizeof(short int)];
    if(entrysize == 2)
    {
        imgDataShort = new std::vector<short int>((hdrDimensions[0] * hdrDimensions[1] * hdrDimensions[2] * hdrDimensions[3]), 0);
        imageData.seekg(0, std::ios::beg);
        int j(0);
        for(int i=0; i < (hdrDimensions[0] * hdrDimensions[1] * hdrDimensions[2] * hdrDimensions[3]); i++)
        {
            imageData.read(reinterpret_cast<char*>(buffer), sizeof(short int));
            memcpy(&(imgDataShort->at(i)), buffer, sizeof(short int));
            j += sizeof(short int);
        }
    }
    delete [] buffer;
}

这个循环有很多动态内存管理。您需要发布一个实函数,并对其进行实调用,以查看是否内存管理不正确。但是说真的,所有这些对
new[]
的调用真的有必要吗?
imageDataShort
在此代码之外还有什么用途?为什么缓冲区不是一个std::vector或其他RAII类型?如果由于某种原因,
delete[]buffer
从未到达,则表示内存泄漏。对于whit:
imgDataShort->at(i)),
这会引发异常,完全丢失
delete[]buffer
行。您需要在代码中添加错误测试和报告。例如,您是否忘记以
ios::binary
的形式打开文件,并遇到CTRL-Z值(Windows文本文件中的EOF字符)。
rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=XXX.XXX.XXX.XXX,mountvers=3,mountport=300,mountproto=udp,local_lock=none,addr=XXX.XXX.XXX.XXX