我正在學習C/C++,我正在做的練習是創建一個評估算術表達式的程序。我是否正確釋放堆中的內存?
要完成練習,我需要一個通用函數,它能夠標記一個字符串。 由於編譯時不知道要解析的字符串的大小,因此我必須動態地分配堆中的一些數據。
工作完成後,可以釋放堆中的內存。
我的問題很簡單:我正確釋放內存?查看評論中的問題。
記號化功能
char** Tokenize(const char delimiter, const char* string)
{
const char* pString = string;
char** tokens = new char*[strlen(string)];
char* buffer = new char[strlen(string)];
char* pointer = buffer;
int c = 0;
for (int k = 0; k < strlen(string); k++)
{
if (string[k] == delimiter)
{
buffer[k] = '\0';
tokens[c] = pointer;
pointer = buffer + k + 1;
c++;
continue;
}
buffer[k] = string[k];
}
tokens[c] = nullptr;
return tokens;
}
主要功能哪些測試記號化功能和relases堆。
int main()
{
char** tokens = Tokenize('.', "192.168.1.1");
char** startTokensPointer = tokens;
char* startBufferPointer = *tokens;
while (*tokens != nullptr)
{
cout << *tokens << endl;
tokens++;
}
delete[] startTokensPointer; //Releases tokens??
delete[] startBufferPointer; //Releases buffer??
system("PAUSE");
}
我無法確定是否正確釋放內存。我可以告訴你,你可能會使用太多的內存,並且需要非常小心才能使其工作。只需使用'std :: string'就可以完成基本相同的任務,除非你只是從程序中刪除所有'新'和大多數指針。這種編程風格是不可維護的。 – nwp
您正在使用C++語法,避免其他好東西沒有太多意義。像std :: string和std :: map。 –
delete與新的匹配,但是對於使用數組的方式看起來非常不對。 ... – deviantfan