【发布时间】:2023-03-31 18:40:01
【问题描述】:
我对这段代码有一个疑问,即这段代码不正确。它可能会在运行时崩溃。由于 p 指针指向 派生 类成员变量(char 数组)的地址 但是在派生类构造函数 base 类构造函数被调用之前,派生类的内存初始化和分配尚未完成。因此,当我们在基类构造函数中执行 strcpy 时,此代码可能会崩溃。
class Base
{
public:
char *p;
Base(){};
Base(char *a):p(a)
{
sprintf(a,"HELLO");
};
};
class Derived:public Base
{
public:
char arr[10];
Derived():Base(arr)
{
};
};
int main()
{
Derived d = new Derived();
return 0;
}
从这段代码中,我打算将 char 数组的地址提供给需要在传递的地址上写入一些字符串的基类。 但我不确定这段代码是否会一直有效。 请澄清。
【问题讨论】:
-
您的疑问符合条件。只是在构造函数中传递指针是无害的,在
sprintf中使用它不是。
标签: c++