c++ - 使用 delete-operator 时程序停止工作

标签 c++ delete-operator

我刚开始使用删除运算符,我对为什么当我尝试从指针数组中删除一个元素时我的程序总是崩溃感到有点困惑。它在两次删除时都崩溃了,我注释掉了另一个 for 循环来测试它。

int main()
{
    char ** str_array = nullptr;
    char * str = nullptr;
    char delimiter = ' ';
    int arraySize = 0;

    str = new char [51];

    cout << "Enter a string" << endl;
    cin.clear();
    cin.ignore( cin.rdbuf() -> in_avail() );
    cin.getline(str, 50);
    cin.clear();

    arraySize = StrToArray(str_array, str, delimiter);

    for (int i = 0; i < arraySize; i++)
    {
        cout << str_array[i] << endl;
    }

    for (int i = 0; i < arraySize; ++i)
    {
        delete [] str_array[i];
    }
    delete [] str_array;

    return 0;
}

这是我用来初始化 str_array 的函数。

int StrToArray(char **& str_array, char * str, char delimiter)
{
    int size = 0;
    int arraySize = 0;
    int start = 0;
    for (int i = 0; i < strlen(str); i++)
    {
        if (str[i] == ' ') 
        {
            size++;
            if (str[i + 1] == '\0' || str[i + 1] == ' ')
            {
                size--;
            }
        }
    }

    str_array = new char * [size];

    for (int i = 0; i < strlen(str) + 1; i++)
    {
        if ((str[i] == ' ' || str[i] == '\0') && !(str[i + 1] == '\0' || str[i + 1] == ' '))
        {
            str_array[arraySize] = new char[i-start];
            arraySize++;
            for (int x = 0; x <= i - start; x++)
            {
                str_array[arraySize-1][x] = str[x + start];

                if (x == i-start)
                {
                    str_array[arraySize - 1][x] = '\0';
                }
            }

            i++;
            start = i;
        }

    }
    return (size + 1);
}

我的 str_array 被初始化为一个指针数组,每个指针指向一个 cString。 我想要做的是删除数组的每个元素,然后删除数组本身。但是,每次我尝试执行其中一个删除运算符时,我的代码都会崩溃。

最佳答案

你的str_arraystr_array[i] 都是数组,你应该使用delete[] 运算符来释放它们。请参阅下面的简单示例。

void f(size_t size)
{
    char** str_array = new char* [size];
    for (int i = 0; i < size; ++i) {
        str_array[i] = new char[i];
    }

    for (int j = 0; j < size; ++j) {
        delete[] str_array[j];
    }

    delete[] str_array;
}

关于c++ - 使用 delete-operator 时程序停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54491187/

相关文章:

c++ - 为什么调用 dtor(使用 annoymous/lambda func)

c++ - 为什么调用分配器类的deallocate方法时指针不允许为空?

c++ - 为什么指向对象的第二个指针未设置为 NULL 而是对象指针?

c++ - = 函数声明后删除的含义

c++ - Boost套接字 - 客户端没有从服务器接收所有字节

c++ - IBM 单精度 float 据转换为预期值

c++ - 在 VS (2010) 中使用标准 'main' 条目构建和运行 C++ 控制台应用程序

c++ - SFML 2.4.2 不在 VS 2017 社区中绘制

c++ - 在析构函数中删除指向 char* vector 的指针(不工作)

c++ - 删除与删除[]