c++ - 解决dobule free
PHPz
PHPz 2017-04-17 14:52:42
0
0
488

我有一个可以反转char数组的类Buffer:

Buffer.h:

#ifndef __BUFFER_H__
#define __BUFFER_H__

#include <stdlib.h>
#include <cerrno>
#include <stdio.h>

class Buffer
{

private:
  char * buffer;
  int size;

public:
    Buffer(int size);
  ~Buffer();
  void reverse(int size);

  Buffer(const Buffer &) = delete;
  Buffer& operator=(const Buffer &) = delete;


    friend class File;
};

#endif

Buffer.cc:


#include "Buffer.h"
#include "Exception.h"


Buffer::Buffer(int size)
{
  this -> size = size;
  this -> buffer = (char *)malloc(size);
  if(this -> buffer == NULL)
    throw Exception(errno);
}

Buffer::~Buffer()
{
  if(this -> buffer != NULL)
  {
    free(this -> buffer);
    this -> buffer = NULL;
  }
}

void Buffer::reverse(int size)
{
  char tmp;
  int i;
  char * tmpb = this -> buffer;
  for(i = 0; i < size / 2; i++)
  {
    tmp = (char)tmpb[i];
    tmpb[i] = tmpb[size - i - 1];
    // printf("exchange %x with %x\n", tmp & 0xff, tmpb[i] & 0xff);

    tmpb[size - i - 1] = tmp;
  }
}

奇怪的是我处理了copy constructor和assignment operator,然后把我的实现放到一个远程服务器上测试,那个服务器还是
告诉我有double free。看了好久还是看不出来怎么回事。
里面有一个Makefile。我没有那个测试服务器的权限。谁能看出来哪部分能导致double free。
测试的所有文件放在坚果云:https://www.jianguoyun.com/p/...
里面包括一个叫rcopy的程序,可以把一个文件的内容反过来。那个服务器用fault injection来测试我的程序

PHPz
PHPz

学习是最好的投资!

모든 응답(0)
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿