繁体   English   中英

我是否需要为构造函数的char指针分配内存?

[英]Do I need to allocate memory for a char pointer to a constructor?

我有一个Arduino代码的构造函数,如下所示:

class X {
  private:
    char* _name;
  public:
    X(char*);
}

X::X(char* name) {
  _name = name;
}

我的问题是:我是否需要分配一个char缓冲区而不是仅仅依赖于传递的字符串指针? 我不是在字符串上操作(除了缩短它)。 我似乎还没有遇到任何问题,但我想验证。

这是针对arduino的,但对C和C ++的响应也会受到欢迎。

您不需要分配缓冲区,但它可能更强大。 特别是因为你是在一个嵌入式系统上,比如没有调试器,所以如果有人从调用者的堆栈中传递了一个字符串,你就会被清除。 试图找出那种问题所在,就像大海捞针一样。 简而言之,如果有人向您传递了一些数据,那么很难保证内存会持续存在,因此您最好自己处理这些分配。

这取决于。

基本上,根据代码的方式,您要求名称的生命周期大于类实例的生命周期。 如果name始终是字符串文字,即X(“foo”),那么这是可以接受的。 否则,调用者必须分配字符串,这是一个奇怪且容易出错的合同要求。

我建议总是在构造函数中复制字符串,除非很明显它始终是字符串文字。

在这种情况下,您可能遇到问题。

X foo() {

      char ar[10];
      strcpy(ar,"Hello");

      X obj(ar);

      return obj;
} // ar is deallocated here.

但是返回的对象的成员变量_name仍然指向堆栈中较早的ar 因此,最好分配内存,然后在不再需要时释放它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM