我有一个可以反转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来测试我的程序
学习是最好的投资!