Vector 使用向量类中的基础数组对fwrite执行EXC_BAD_访问错误

Vector 使用向量类中的基础数组对fwrite执行EXC_BAD_访问错误,vector,exc-bad-access,zlib,fwrite,Vector,Exc Bad Access,Zlib,Fwrite,我被这个EXC\u BAD\u访问错误难住了。我使用zlib压缩并保存函数deflateReadOut中数组ch中的一些数据,该函数是从函数generate调用的。程序在标记行的fwrite处失败 class WSUMap { public: vector<vector <unsigned char> > chunk; int xComp[4]; int yComp[4]; vector<int> priority; Hash hashChunk; WS

我被这个EXC\u BAD\u访问错误难住了。我使用zlib压缩并保存函数deflateReadOut中数组ch中的一些数据,该函数是从函数generate调用的。程序在标记行的fwrite处失败

class WSUMap {
public:


vector<vector <unsigned char> > chunk;
int xComp[4];
int yComp[4];
vector<int> priority;
Hash hashChunk;

WSUMap()
{
    chunk.resize(4);
    chunk[0] = vector<unsigned char>(CHUNK);
    chunk[1] = vector<unsigned char>(CHUNK);
    chunk[2] = vector<unsigned char>(CHUNK);
    chunk[3] = vector<unsigned char>(CHUNK);
    priority.push_back(0);
    priority.push_back(1);
    priority.push_back(2);
    priority.push_back(3);
    xComp[0] = -1;
    xComp[1] = -1;
    xComp[2] = -1;
    xComp[3] = -1;
    yComp[0] = -1;
    yComp[1] = -1;
    yComp[2] = -1;
    yComp[3] = -1;
}

void generate() {
    for (int i = 0; i<CHUNK; i++) {
        chunk[0][i]=100;
    }
    for (int i = 0; i < 16; i++) {
        for (int j = 0; j < 16; j++) {
            cout << chunk[0][0] << endl;
            unsigned char* ch = &chunk[0][0];
            cout << ch[0] << endl;
            deflateReadOut(i, j, &chunk[0][0]);
        }
    }
}

void deflateReadOut(int x, int y, unsigned char* ch) {
    int ret, flush;
    unsigned have;
    z_stream strm;
    vector<unsigned char> out = vector<unsigned char>(CHUNK);
    out.resize(CHUNK);

    /* allocate deflate state */
    strm.zalloc = Z_NULL;
    strm.zfree = Z_NULL;
    strm.opaque = Z_NULL;
    ret = deflateInit(&strm, Z_DEFAULT_COMPRESSION);
    if (ret != Z_OK) assert(true);
    //return ret;

    ostringstream oss;
    oss << "map/" << x << "x" << y;
    string str = oss.str();
    cout << str << endl;
    FILE* dest = fopen(str.c_str(), "w");

    /* run deflate() on input until output buffer not full, finish
       compression if all of source has been read in */
    do {
        strm.avail_out = CHUNK;
        strm.avail_in = CHUNK;
        strm.next_in = ch;
        strm.next_out = &out[0];

        ret = deflate(&strm, Z_FINISH); /* no bad return value */
        assert(ret != Z_STREAM_ERROR); /* state not clobbered */

        have = CHUNK - strm.avail_out;
        if (fwrite(&out[0], 1, have, dest) != have || ferror(dest)) {//ERROR HERE
            (void) deflateEnd(&strm);
            //return Z_ERRNO;
        }

    } while (strm.avail_out == 0);
    assert(strm.avail_in == 0); /* all input will be used */

    /* clean up and return */
    (void) deflateEnd(&strm);
}
类WSUMap{
公众:
向量块;
int-xComp[4];
int yComp[4];
向量优先级;
哈希块;
WSUMap()
{
调整块大小(4);
块[0]=向量(块);
块[1]=向量(块);
块[2]=向量(块);
块[3]=向量(块);
优先级。推回(0);
优先权。推回(1);
优先权。推回(2);
优先权。推回(3);
xComp[0]=-1;
xComp[1]=-1;
xComp[2]=-1;
xComp[3]=-1;
yComp[0]=-1;
yComp[1]=-1;
yComp[2]=-1;
yComp[3]=-1;
}
void生成(){

对于(inti=0;i我找到了它。我试图写入一个不存在的目录,我认为如果它不存在,它会自动创建它