Problem z reallociem

0

Witam
Mam problem z funkcją realloc. Jeżeli nie używam funkcji realloc jest wszystko w porządku jeśli natomiast ilość elementów przekroczy 10 to wtedy zaczynają się problemy Z późniejszego działania programu oraz z widoku debuggera widzę, że tablice się jakby przeplatają czyli
w tablicy c1 i c2 powinno być odpowiednio:
{1,2,3,..,23},{24,25,26,...,48} natomiast jest {43808430,32141244,3,4,...,10,24,25,26,...,34} i podobnie jest w tablicy c2.
Więc moje pytanie brzmi co robię źlę używając funkcji realloc ?

 #include <stdio.h>
#include <stdlib.h>

int main() {
int p,*tab,*l;
int *c1=(int*)malloc(10*sizeof(int));
int *c2=(int*)malloc(10*sizeof(int));
int temp=0,v1,v2,l1,l2,ll;
int v12;

l=&ll;
for (v1=1;v1<=2;v1++){
    *l=0;
    if (v1==1){
        tab=c1;
    }
    else {
        tab=c2;
        temp=0;
        *l=0;
    }
    while(temp!=-1){
            scanf("%d",&temp);
            if (temp!=-1){
                *(tab+*l)=temp;
                //printf("Wstêpne C1: od=%d wartosc=%d \n",*l,*(c1+*l));
                (*l)++;
                if ((*l % 10)==0){
                    tab=realloc(tab,(*l+10)*sizeof(int));
                }
            }
    }

...    

free(c1);
free(c2);


return 0;
}
0
  1. Naucz się pisać kod jak normalny czlowiek. Za nazywanie zmiennych c1,c2,l,ll,temp,v1,v2 powinni ci dać zakaz używania komputera
  2. to free na końcu to jakaś tragedia, bo przecież wsakźniki c1 i c2 pokazują na adres w pamięci który dostały z malloca. realloc mógł go już dawno temu zwolnić...
  3. Za używanie zmiennej lokalnej za pomocą wskaźnika do niej (wtf? po co?) kolejny tydzień zakazu używania komputera...
  4. Za używanie zapisu:
*(tab+*l)=temp;

sto batów i kolejny tydzień bez komputera. Wiesz że można to było zapisać normalnie, jak człowiek:

tab[ll]=temp;

?
5. Przypisanie

tab=realloc(tab,(*l+10)*sizeof(int));

moze mieć oplakane skutki, bo jak realloc nie da rady zarezerwować nowej pamięci to zgubisz wskaźnik do poprzedniego obszaru...
6. Reszta wygląda mniej więcej ok, więc trudno powiedzieć czemu masz takie błędy o których piszesz. Ale przecież widzisz pod debuggerem co się dzieje?

0

@Shalom Dzięki za konstruktywną krytykę :D Naprawdę :D
Nazwy zmiennych używam takich bo nigdy nie miałem głowy do tego, no ale cóż trzeba będzie się przestawić :D

Co do zapisu

 *(tab+*l)=temp;

bardzo chętnie bym używał normalnego odwołania do tablicy, ale na studiach wymagają mi czegoś takiego więc co zrobić...

Przemyślałem to przypisanie do realloca i zmieniłem to tak ja myślę że to powinno być i uwaga problem prawie zniknął. Został mi tylko błąd dlaczego na początku mam te wielkie dziwne wartości ( {43749833,43678462,3,4,.. } )

1 użytkowników online, w tym zalogowanych: 0, gości: 1