我編寫了一個簡單的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);
};
#endif
Buffer.cc
#include "Buffer.h"
Buffer::Buffer(int size)
{
this -> size = size;
this -> buffer = (char *)malloc(size);
if(this -> buffer == NULL)
throw 1;
}
Buffer::~Buffer()
{
if(this -> buffer != NULL)
free(this -> buffer);
}
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;
}
}
有一個遠程服務器使用故障注入來測試我的實現。該服務器給我報告說有雙重空閒或腐敗引起的錯誤。我已經多次閱讀我的實現,但沒有找到該錯誤的運氣。我沒有訪問該服務器。任何幫助?我不得不使用C風格的代碼。否則,我會失敗的服務器測試。這是一個很難的要求。那麼,你可能會認爲這個要求很愚蠢。但這是要求。也許有一點是在混合C和C++的時候學習壞的。
服務器提供了一個主函數來測試我的實現。
對於任何想要查看所有代碼的人,可以從https://mega.nz/#!FhoHQD5Y!iD9tIZMNtKPpxfZTpL2KWoUJRedbw6wToh6QfVvzOjU下載zip文件。只需使用make
進行編譯。其結果是名爲的程序,該程序逐字節地反轉文件的內容,然後輸出到新文件。
這是應該做什麼,'std :: vector'與'std :: reverse'完成不了嗎? –
不完全相關,但爲什麼在C++代碼中使用'malloc','free'和C-style轉換? – UnholySheep
確實存在雙重的免費風險。你沒有定義複製構造函數。閱讀有關[什麼是三條規則?](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree)。除此之外,爲什麼你在你的C++代碼中使用'malloc','free'而不是'new'和'delete'? –