Maison > Questions et réponses > le corps du texte
Le code est le suivant :
void CopyStr(char *&destination, char *&source) {
int sz = strlen(source) + 1;//此处引发异常!!
destination = new char[sz];
for (unsigned i = 0; source[i] != 'rrreee'; i++)
destination[i] = source[i];
destination[sz - 1] = 'rrreee';
return;
}
Data::Data(Data &adata) {
CopyStr(adata.P_name, P_name);
CopyStr(adata.address, address);
CopyStr(adata.number, number);
}
Description du code : la classe Data compte désormais trois membres char*, à savoir P_name, adresse et numéro.
Photos compilées :
S'il vous plaît, donnez-moi la réponse, merci ! !
伊谢尔伦2017-05-31 10:41:26
Premièrement, les paramètres comme char *&source sont remplacés par char *const &source
, et deuxièmement, CopyStr(adata.P_name, P_name) est remplacé par CopyStr(P_name, adata.P_name).
Voici le code que j'ai testé, il peut être exécuté directement :
#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] != 'rrreee'; i++)
*(des +i) = source[i];
*(des+sz - 1) = 'rrreee';
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;
}
我想大声告诉你2017-05-31 10:41:26
D'où vient le deuxième paramètre (tel que P_name) lors de l'appel de CopyStr ?
phpcn_u15822017-05-31 10:41:26
vs remplira la zone mémoire non initialisée avec 0xCCCCCCCC (c'est aussi la valeur de 烫烫烫
的由来);
考虑到你访问到了0xCCCCCCCC,所以要不就是你传进去了个非法指针,要不就是这个char*
指针对应的字符串没有以'0'结尾;
可以试着输出一下source
, puis essaiera d'afficher les données pointées par le pointeur octet par octet