所以这是我的代码:
#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/