Kod adalah seperti berikut:
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);
}
Perihalan kod: Kelas Data kini mempunyai tiga ahli char*, iaitu P_name, alamat dan nombor.
Gambar yang disusun:
Sila beri saya jawapan, terima kasih! !
Pertama, parameter seperti char *&source ditukar kepada
char *const &source
, dan kedua, CopyStr(adata.P_name, P_name) ditukar kepada CopyStr(P_name, adata.P_name).Ini adalah kod yang saya uji, ia boleh dijalankan terus:
Dari manakah parameter kedua (seperti P_name) datang apabila memanggil CopyStr?
vs akan mengisi kawasan memori yang tidak dimulakan dengan 0xCCCCCCCC (ini juga merupakan nilai
烫烫烫
的由来);考虑到你访问到了0xCCCCCCCC,所以要不就是你传进去了个非法指针,要不就是这个
char*
指针对应的字符串没有以'0'结尾;可以试着输出一下
source
, dan kemudian cuba untuk mengeluarkan data yang ditunjuk oleh bait penunjuk demi bait