在堆c ++中保留内存时出错

时间:2015-07-19 19:55:01

标签: c++

#include<iostream>
using namespace std;
#include<cstring>



struct stringy
{
    char * str;
    int ct;
};

void set(stringy & stringa, char ar[]);
void show(stringy & stringa);

int main()
{
    stringy beany;
    char testing[] = "Reality isn't what is used to be.";

    set(beany, testing);
    show(beany);

    return 0;
}

void set(stringy & stringa, char * ar)
{
    char * ps = new char[strlen(ar) + 1];
    stringa.str = ps;
    strcpy(ar,ps);
    cout << strlen(stringa.str);
    stringa.ct++;
    delete [] ps;

}

void show(stringy & stringa)
{
    for(int i = 0; stringa.str[i] != '\0'; i++)
    {
        cout << stringa.str[i];
    }
}

这是我的代码。这是练习的一部分。当被要求编写执行所请求任务的函数时,我被赋予了main函数的主体。

找到空间来保存测试副本, 设置beany的str成员指向 新块,将测试复制到新块, 并设置bet的ct成员

我的问题在于设置功能。我觉得好像我满足了标准,strlen就在那里,因为我想弄清楚发生了什么......它返回0.然后程序退出。

1 个答案:

答案 0 :(得分:0)

此代码存在很多问题,其中包括:

strcpy(ar, ps);

这会将ps复制到ar,而不是相反。你想要:

strcpy(ps, ar);

如果使用const限定符,编译器会检测到此错误。

此外,delete[] ps末尾的set()不应该在那里。

最后,我不确定ct字段的用途是什么,所以我不能告诉你应该是什么,但增加一个未初始化的字段肯定是错误的。