Răsfoiți Sursa

:bug:Debug boucle infini

Loquicom 6 ani în urmă
părinte
comite
3cefd9cee6
1 a modificat fișierele cu 9 adăugiri și 8 ștergeri
  1. 9 8
      subdiv.c

+ 9 - 8
subdiv.c

@@ -99,7 +99,7 @@ boolean div_node(subdiv* sd, node* n) {
     newn->prev = n->index;
     newn->next = n->next;
     //Modifie node suivant la nouvelle
-    if (n->next != -1) {
+    if (n->next != -1 || n->next == n->index) {
         sd->mem[n->next].prev = newn->index;
     }
     //Modifie node origine
@@ -125,7 +125,7 @@ boolean fusion_node(subdiv* sd, node* n) {
     n->end = n2->end;
     n->length *= 2;
     n->next = n2->next;
-    if (n2->next != -1) {
+    if (n2->next != -1 || n2->next == n2->index) {
         sd->mem[n2->next].prev = n->index;
     }
     //Indique que l'autre node n'est plus utilisée
@@ -137,6 +137,7 @@ boolean fusion_node(subdiv* sd, node* n) {
 
 void ini_subdiv(subdiv* sd) {
     sd->mem[0] = (node){0, 0, MEM_SIZE, MEM_SIZE, MEMEMPTY, -1, -1};
+    printf("%d\n", sd->mem[0].next);
     sd->use[0] = true;
     for (int i = 1; i < MEM_SIZE / 2; i++) {
         sd->use[i] = false;
@@ -153,7 +154,7 @@ boolean add_data_subdiv(subdiv* sd, char* mem, char* key, char* data) {
             break;
         }
         //Charge le prochain noeud
-        if(n->next == -1){
+        if(n->next == -1 || n->next == n->index){
             n = NULL;
         } else {
             n = &sd->mem[n->next];
@@ -197,7 +198,7 @@ boolean add_fdata_subdiv(subdiv* sd, char* mem, char* data) {
             break;
         }
         //Charge le prochain noeud
-        if(n->next == -1){
+        if(n->next == -1 || n->next == n->index){
             n = NULL;
         } else {
             n = &sd->mem[n->next];
@@ -253,7 +254,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
                 n = &sd->mem[0];
             } else {
                 //Charge le prochain noeud
-                if(n->next == -1){
+                if(n->next == -1 || n->next == n->index){
                     n = NULL;
                 } else {
                     n = &sd->mem[n->next];
@@ -264,7 +265,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
                 n = &sd->mem[0];
             } else {
                 //Charge le prochain noeud
-                if(n->next == -1){
+                if(n->next == -1 || n->next == n->index){
                     n = NULL;
                 } else {
                     n = &sd->mem[n->next];
@@ -272,7 +273,7 @@ boolean remove_data_subdiv(subdiv* sd, char* mem, char* key) {
             }
         } else {
             //Charge le prochain noeud
-            if(n->next == -1){
+            if(n->next == -1 || n->next == n->index){
                 n = NULL;
             } else {
                 n = &sd->mem[n->next];
@@ -309,7 +310,7 @@ void show_data_subdiv(subdiv* sd, char* mem){
             free(str);
         }
         //Charge le prochain noeud
-        if(n->next == -1){
+        if(n->next == -1 || n->next == n->index){
             n = NULL;
         } else {
             n = &sd->mem[n->next];