Der Code lautet wie folgt:
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);
}
Codebeschreibung: Die Datenklasse hat jetzt drei char*-Mitglieder, nämlich P_name, Adresse und Nummer.
Zusammengestellte Bilder:
Bitte gib mir die Antwort, danke! !
首先char *&source这种参数改为
char *const &source
,其次CopyStr(adata.P_name, P_name),这种改为CopyStr(P_name, adata.P_name)。这是我测试的代码,直接可以运行:
调用CopyStr时的第二个参数(比如P_name)是哪里来的?
vs会用0xCCCCCCCC填充未初始化的内存区域(这也是
烫烫烫
的由来);考虑到你访问到了0xCCCCCCCC,所以要不就是你传进去了个非法指针,要不就是这个
char*
指针对应的字符串没有以'0'结尾;可以试着输出一下
source
的值,然后逐字节输出指针所指向的数据试试