动态字符数组没有给出正确的字符串长度

Azm*_*sov 1 c++ memory-management char

我想有一个动态字符数组,其长度等于循环迭代.

char* output;
for (short i=0; i<2; i++){
    output = new char[i+1];
    printf("string length: %d\n",strlen(output));
    delete[] output;
}
Run Code Online (Sandbox Code Playgroud)

但是strlen返回16,我希望它是1和2.

Jam*_*lis 7

指向的新分配的内存output未初始化:它可能包含任何内容.

strlen要求它的参数是一个指向以null结尾的字符串的指针,而output不是因为它尚未初始化.该调用strlen(output)会导致程序显示未定义的行为,因为它会读取此未初始化的内存.任何结果都是可能的.