错误的内存分配新char [n]

Igo*_*gor 1 c++ memory allocation

这个程序有什么问题?

#include<iostream>
using namespace std;
void main()
{

    int n = 5;
    char* p = new char [n];
    int i;
    for(i=0;i<n;i++)
    {
        p[i] = 'A'+i;
    }
    cout<<p<<endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么我得到"ABCDExxxx"而不是"ABCDE"?内存分配有什么问题?

Pet*_*ker 5

除了永远不会释放内存之外,内存分配没有任何问题.delete [] p;main返回之前不要忘记.

输出的问题是p指向的字符串没有终止'\0'.一般情况下,你应该为一个数组分配一个空间,至少比你要放入数组的字符多一个,'\0'然后在最后一个之后放一个数组.当然,更好的解决方案是使用std::string,它会为您完成所有这些.