c++ - 在这种情况下我应该如何使用删除c++

标签 c++ delete-operator

所以这是我的代码:

#include "stdafx.h"
#include <iostream>

using namespace std;

#define MAX 5
#define STR_LENGTH 40

void main()
{
    char *p_str[MAX];

    for (int i = 0; i < MAX; i++)
    {
        *(p_str+i) = new char(STR_LENGTH);
        cout << "Please enter a string:  ";
        cin >> *(p_str+i);
    }

    for (int i = 0; i < MAX; i++)
    {
        cout << *(p_str+i) << endl;
        delete (p_str+i);
    }

}

那里的最后一行,我删除了那个,但是当它到达那里时它就中断了,请问有什么解决办法吗?

最佳答案

new char(STR_LENGTH) 并不像您想象的那样。它为单个字符分配内存,初始化为 STR_LENGTH 的值。如所写,您有缓冲区溢出。使其成为 new char[STR_LENGTH]

现在您正在分配一个数组,您应该使用 delete [] (p_str+i); 释放它,或者更简洁一点,delete [] p_str[i];

关于c++ - 在这种情况下我应该如何使用删除c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659988/

相关文章:

c++ - 为什么 C++ 运算符 new/delete/variants 不应该在头文件中?

c++ - 如何使用 GTest 测试严重依赖 MFC 的方法

c++ - 机器 epsilon - C++ 中的 long double

c++计算编译时间常数,同时防止整数常数溢出

c++ - 析构函数和 Malloc 成员

c++ - 删除同一个对象两次

C++。何时删除 C 样式数组以释放内存

c++ - 调试断言失败!内存释放错误

c++覆盖数组类的>>运算符

c++ - 聊天应用程序 - 无法从客户端连接到服务器