Exception levée par C++ CopyConstructor ! !
过去多啦不再A梦
过去多啦不再A梦 2017-05-31 10:39:26
0
3
773

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 ! !

过去多啦不再A梦
过去多啦不再A梦

répondre à tous (3)
伊谢尔伦

Premièrement, les paramètres comme char *&source sont remplacés parchar *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  #include  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; }
    我想大声告诉你

    D'où vient le deuxième paramètre (tel que P_name) lors de l'appel de CopyStr ?

      phpcn_u1582

      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

        Derniers téléchargements
        Plus>
        effets Web
        Code source du site Web
        Matériel du site Web
        Modèle frontal
        À propos de nous Clause de non-responsabilité Sitemap
        Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!