windows - C++ CopyConstructor 引发的异常!!

查看:81
本文介绍了windows - C++ CopyConstructor 引发的异常!!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

代码如下:

void CopyStr(char *&destination, char *&source) {
    int sz = strlen(source) + 1;//此处引发异常!!
    destination = new char[sz];
    for (unsigned i = 0; source[i] != '\0'; i++)
        destination[i] = source[i];
    destination[sz - 1] = '\0';
    return;
}

Data::Data(Data &adata) {
    CopyStr(adata.P_name, P_name);
    CopyStr(adata.address, address);
    CopyStr(adata.number, number);
}

代码说明:Data类现在有三个char*成员,分别是P_name,address和number。

编译图片:

求大神解答,谢谢!!

解决方案

首先char *&source这种参数改为char *const &source,其次CopyStr(adata.P_name, P_name),这种改为CopyStr(P_name, adata.P_name)。
这是我测试的代码,直接可以运行:

#include <iostream>
#include <cstring>
using std::cout;
using std::endl;
using std::strlen;
class Data
{
public:
  char *a = "";
  char *b = "";
  char *c = "";
  Data(char *a, char *b, char *c):a(a),b(b),c(c) {};
  Data(Data const &data);
};


int CopyStr(char * &des,  char *  const &source)
{
  int sz = strlen(source) + 1;
  des = new char(sz);
  for (unsigned i = 0; source[i] != '\0'; i++)
    *(des +i)  = source[i];
  *(des+sz - 1) = '\0';
  return 0;
}

Data::Data(Data const  &data)
{ 
  CopyStr(a, data.a);
  CopyStr(b, data.b);
  CopyStr(c, data.c);
}

int main()
{
  Data data = Data("abcd", "b", "c");
  char * p = "232323";
  Data data2 =  Data(data);
  char * p2 = "1232";
  CopyStr(p2, p);
  cout << p2 << endl;
  cout << data.a << endl;
  cout << data2.a << endl;
  return 0;
}

这篇关于windows - C++ CopyConstructor 引发的异常!!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆