| | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 10.02.10 Prihlásený: 21.08.17 Príspevky: 67 Témy: 15 Bydlisko: Bratislava ... | Napísal Pascal: 16.11.2012 17:05 | |
|
Zdravim mam jeden problem a uz mi z neho sibe pomaly. Kód: vstupc[10000]; nacitam udaj do stacickeho stringu Kód: fgets(vstupc,10000,stdin); no potom mam strukturu Kód: struct Node { char *udaj; }; Kód: struct Node* node = (struct Node*)malloc(sizeof(struct Node)); Dostanem udaj tak node->udaj = (char*) malloc(strlen(vstupc)*sizeof(char)); Potom dostanem dalsi udaj, a chcem ho pridat k tomu, co tam uz je. Skusal som to takto Kód: node->udaj=realloc(node->udaj, ((strlen(node->udaj)+strlen(vstupc))* sizeof(char))); sprintf(node->udaj, "%s%s", node->udaj, vstupc); Zda sa, ze to aj funguje hocijake znaky, cisla medzeri vsetko funguje, ale ako nahle, dam prvy udaj 7 miestny string a nasledne chcem k nemu pridat hocijaky dlhy udaj, tak to padne. Ale ked to debugujem tak vsetko funguje, zapise sa kam ma, vsetko sa prida tam kde ma. Uz som ztoho jelen. Dakujem, za rady.
_________________ AMD Ryzen R7 1700X, B350, 16GB Ram, 270x |
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 16.11.2012 18:38 | |
|
Mozes poslat viac kodu? Aspon v tej casti, kde nacitavas string a alokujes ( nech je to suvisle, aby sme vedeli posudit, ci je problem tam ).
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 10.02.10 Prihlásený: 21.08.17 Príspevky: 67 Témy: 15 Bydlisko: Bratislava ... | Napísal autor témy Pascal: 16.11.2012 19:08 | |
|
Kód: while(scanf("%s",&prikaz)==1){ temp = strcmp( prikaz, "save" ); if (temp==0){ fgets(vstupc,70,stdin); //udaj root = insert(root,vstupn,vstupc+1); } } Kód: struct Node* insert(struct Node* node, char *data, char *datas) { if (node == NULL) return(newNode(data,datas)); else { int porovnaj = strcmp( data, node->data ); if (porovnaj < 0) *** { } else if (porovnaj > 0) { *** }else if (porovnaj == 0) { //Uz som to skusal aj takto obklukou, ale rovnakz vzsledok ako realloc copy= (char*) malloc(strlen(node->udaj)*sizeof(char)); strcpy(copy,node->udaj); node->udaj=NULL; node->udaj = (char*) malloc((strlen(copy)+strlen(datas)+1)*sizeof(char)); sprintf(node->udaj, "%s%s", copy, datas); } return node; } }
struct Node* newNode(char *data,char *datas) { struct Node* node = (struct Node*) malloc(sizeof(struct Node)); node->udaj = (char*) malloc(strlen(datas)*sizeof(char)); **** strcpy(node->udaj,datas); //udaje **** return(node); } udaj v strukture staticky tak to ide vpohode. Padne to vzdy tam niekde ako sa tam pridava nova hodnota ked tam uz nejaka je, ale len ak prva bola 7 miesta , co absolutne nechapem.
_________________ AMD Ryzen R7 1700X, B350, 16GB Ram, 270x |
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 18.11.2012 10:17 | |
|
Podla tohto kodu ti neviem povedat, kde je problem. Zrejme ti ostava len viac siahnut na debugger a tam poriadne krokovat program a hlavne sledovat, kde to padne, na ktorom riadku. Zistit si hodnoty premennych a zistit, preco to padlo.
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
Registrovaný: 17.07.11 Prihlásený: 29.12.20 Príspevky: 1516 Témy: 3 | Napísal BX: 18.11.2012 11:17 | |
|
Padá to teda na tomto kuse kódu, áno? Kód: //Uz som to skusal aj takto obklukou, ale rovnakz vzsledok ako realloc copy= (char*) malloc(strlen(node->udaj)*sizeof(char)); strcpy(copy,node->udaj); node->udaj=NULL; node->udaj = (char*) malloc((strlen(copy)+strlen(datas)+1)*sizeof(char)); sprintf(node->udaj, "%s%s", copy, datas); Skúsim teda len hádať. Copy ukazuje na pamäť o veľkosti strlen(node->udaj), takže tam nie je miesto pre ukončovaciu nulu. A to môže byť veľký problém. node->udaj neuvoľňuješ funckiou free = memleaky jak sviňa a tie vedia často zariadiť nepredvídateľné chovanie. Ak by si poslal celý spustiteľný kód, ľahšie by sa radilo.
_________________ Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám! |
|
Registrovaný: 11.01.09 Prihlásený: 29.03.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 18.11.2012 11:52 | |
|
BX píše: Ak by si poslal celý spustiteľný kód, ľahšie by sa radilo. JJ, tiez som spominal, ale mozno ide o nejaky projekt do skoly, tak to tu asi nechce supnut cele.
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|