1

我最近做了一个学校的家庭作业并失去了分数,在评论中评分者说我没有正确释放指针。下面是我发送的代码,我想知道正确解除分配指针的效果如何?

/*Student: Daniel
 *Purpose: To reverse a string input using
 *pointers.
 */
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main() {
    string input;
    char *head = new char, *tail = new char;
    char temp;
    //Get the string from the user that will be reversed
    cout << "Enter in a string that you want reversed: ";
    getline(cin, input);
    //Create and copy the string into a character array
    char arr[input.length()];
    strcpy(arr, input.c_str());
    //Set the points of head/tail to the front/back of array, respectably
    head = &arr[0]; tail = &arr[input.length()-1];
    for(int i=0; i<input.length()/2; i++) {
        temp = *(tail);
        *tail = *head;
        *head = temp;
        tail --; head ++;
    }
    for(int i=0; i<input.length(); i++) {
        cout << arr[i];
    }
    //********MY PROBLEM AREA*************
    delete head; delete tail;
    head = NULL; tail = NULL;
    return 0;
}
4

1 回答 1

7

所以看看这里...

char *head = new char, *tail = new char;

接着...

//Set the points of head/tail to the front/back of array, respectably
head = &arr[0]; tail = &arr[input.length()-1];

您重新分配了什么headtail指向,所以当您调用删除时,您实际上并没有删除正确的东西。事实上,我很惊讶你没有崩溃。

真的,你可能只是这样做:

char *head = NULL; char* tail = NULL;

然后不要删除任何东西,因为你不会有任何动态。

于 2013-11-10T02:28:24.453 回答