C ++内存分配(构造函数)

时间:2015-12-05 18:47:44

标签: c++

我需要编写包含指向文本行的char指针的类和从参数列表中检索文本行的构造函数,动态分配内存并将行文本复制到组件类。 Writed programm无法正常工作。示例Error。 怎么了?请帮忙!

class A
{
    char* text;
public:
    A(char *line); 
};
A::A(char *line) {
    int length = strlen(line);
    text = new char[length];
    if (strlen(line) <= sizeof(text))
        strcpy_s(text, length, line);
    else
    {
        cout << text << endl;
        cout << "Too long string" << endl;
    }
}
int main()
{
    A ob("aaaaaa");
    system("PAUSE");
    return 0;
}

1 个答案:

答案 0 :(得分:2)

sizeof运算符返回对象的大小(不是字符串的大小)。所以在这种情况下

sizeof(text)

它返回对象text的大小。您将text声明为

char* text;

因此它返回char*的大小。确切的大小取决于系统,但我们猜测它是4。因此,任何长度大于4的字符串都将导致输出:

Too long string

如果我们查看字符串:“aaaaaa”长于4,那么你就得到了预期的输出。

我希望您正在尝试检查前一行是否成功。

text = new char[length];

但是在C ++中,new将工作或抛出异常(导致该程序终止程序)。所以要么这条线工作,要么程序将退出。因此,无需检查new的结果(与C不同,您应检查malloc()的结果)

另请注意:您应该检查strcpy_s()的结果,因为它会在失败时返回错误。由于您没有在目标中提供足够的空间,因此它将指示错误(您不为空终止符提供空间)。