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 ! !
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 :
D'où vient le deuxième paramètre (tel que P_name) lors de l'appel de CopyStr ?
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