当前位置:  开发笔记 > 编程语言 > 正文

为什么仅在添加cout线后输出无法显示变量的内容?

如何解决《为什么仅在添加cout线后输出无法显示变量的内容?》经验,为你挑选了2个好方法。

您正在返回本地变量的地址:

char temp[30];
// ...
return temp;

这是C或C++中的严格禁忌.你从Marks::name()你的temp变量出来的那一刻就是BOOM!您无法再访问它 - 这样做会调用未定义的行为.试试这个,

#include  // somewhere at the top
// ...
std::string Marks::name()
{
   std::string line;
   cout<<"Enter a name:"<


Andy.. 5

问题是因为名称指向的值已被破坏.您正在返回本地变量的地址Marks::name().最有可能是第一个的副作用cout是导致内容name被破坏.当第一个cout被注释掉时,你可能只是幸运.

执行此操作的正确方法是分配一些内存,返回该内存,然后在完成后将其销毁:

char* Marks::name()
{
    char* temp = new char[30];
    cout<<"Enter a name:"<

不要忘记使用delete[],而不仅仅是delete,因为否则只会释放第一个字符.



1> dirkgently..:

您正在返回本地变量的地址:

char temp[30];
// ...
return temp;

这是C或C++中的严格禁忌.你从Marks::name()你的temp变量出来的那一刻就是BOOM!您无法再访问它 - 这样做会调用未定义的行为.试试这个,

#include  // somewhere at the top
// ...
std::string Marks::name()
{
   std::string line;
   cout<<"Enter a name:"<



2> Andy..:

问题是因为名称指向的值已被破坏.您正在返回本地变量的地址Marks::name().最有可能是第一个的副作用cout是导致内容name被破坏.当第一个cout被注释掉时,你可能只是幸运.

执行此操作的正确方法是分配一些内存,返回该内存,然后在完成后将其销毁:

char* Marks::name()
{
    char* temp = new char[30];
    cout<<"Enter a name:"<

不要忘记使用delete[],而不仅仅是delete,因为否则只会释放第一个字符.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有