输出未显示

时间:2019-07-13 18:16:26

标签: c++

问题是当显示为hi时,没有输出显示。只是想知道为什么会发生此错误。

 char * a() 
 {
    char * c;
    char b[10];
    b[0] = 'h';
    b[1] = 'i';
    b[2] = '\0';
    for (int i = 0; b[i] != '\0'; i++)
        c[i] = b[i];

    return c;
}

int main() 
{

    char * d;
    d = a();
    cout << d;
}

2 个答案:

答案 0 :(得分:1)

当您需要数组时,需要为项目分配空间。仅指针是不够的。像

char* c= new char[10]; //room for 10 chars

,请确保不要尝试使用大于10-1 = 9的索引。进入c[10]是不确定的行为。

您可以返回该指针(return c;)。但是,别忘了在不再需要分配的内存时将其释放

d = a();
cout << d;
delete [] d; //free memory allocated with new d[...]

答案 1 :(得分:0)

程序中有几个错误。看起来您创建了char类型的指针,然后执行以下操作: c [i] 这将导致错误。这不是您想要的。 也 您不应该将指针/引用返回给局部变量。局部变量在离开作用域时会被破坏(在您的示例中b在“ return c;”处被破坏)。 因此,当您创建指向本地对象的指针时(请注意,变量是在堆栈上创建的,而不是在堆上创建的),并从函数返回时,指针将指向已损坏的内存。它可能会起作用,但可能不会(不确定的行为),但是您永远都不要这样做。