Aktywne Wpisy
Ularadarowiec +287
Zakończyły się konsultacje społeczne w sprawie nocnej prohibicji. 86% za zakazem sprzedaży alkoholu pomiędzy 22 a 6.
Jeśli radni zatwierdzą projekt, nowe przepisy wejdą w życie od 1.03.2026
https://www.facebook.com/reel/1208331014554640/?app=fbl
#kielce
Jeśli radni zatwierdzą projekt, nowe przepisy wejdą w życie od 1.03.2026
https://www.facebook.com/reel/1208331014554640/?app=fbl
#kielce

Metodzik +690
✨🎁✨🎁✨🎁✨🎁✨🎁✨🎁 DARMOWA GRA NA EPIC ✨🎁✨🎁✨🎁✨🎁✨🎁✨🎁
🔥 Dziedzictwo Hogwartu za D̲A̲R̲M̲O̲ na EPIC 🔥
📊 OCENY:
Metacritic: Metascore: 84/100, Userscore: 8.1/10
🔥 Dziedzictwo Hogwartu za D̲A̲R̲M̲O̲ na EPIC 🔥
📊 OCENY:
Metacritic: Metascore: 84/100, Userscore: 8.1/10






Mam taki kod:
#include
#include
#include
#include
``````
char* getRandomString(intaCount);
``````
intmain()
{
char* ptr;
while(1){
ptr = getRandomString(255);
free(ptr);
printf(
"%s\n", ptr);
sleep(1);
}
``````
return0;
}
``````
char* getRandomString(intaCount)
{
intiCharType;
charcChar;
char* pcDest;
``````
if(aCount <= 0)
returnpcDest =NULL;``````
pcDest = (
char*)malloc(sizeof(char)*(aCount+1));``````
/* initialize random seed: */
srand (time(
NULL));
``````
while(aCount--)
{
iCharType = rand() % 3; // Rand type of char (Num, Upper case, Lower case)
``````
switch(iCharType)
{
case0 : cChar = rand() % 10;
cChar += 48; // We need number
break;
case1 : cChar = rand() % 26;
cChar += 65; // We need capital letter
break;
case2 : cChar = rand() % 26;
cChar += 97; // We need small letter
break;
}
strncat(pcDest, &cChar, 1);
}
``````
returnpcDest;
}
Jest funkcja getRandomString() która alokuje pamięć i zwraca do niej adres.
W main jest pętla która do wskaźnika ptr przypisuje adres jaki dosteje od f. getRandomString(), później zwalnia pamieć pod ptr, czeka sekunde, ponownie przypisuje, zwalnia i... wyrzuca mnie z programu z błędem typu:
albo
Dlaczego tak się dzieje?
To jest pozostałość po tym jak przy pomocy printów próbowałem debuguwać program.
ten printf() jest nieszkodliwy, można go spokojnie wyrzucić, program dalej się wysypie.
Edit:
W którym miejscu funkcji dopisujesz na końcu ciągu znakowego '\0' ?
http://linux.die.net/man/3/strcat
Funkcja getRandomString(), robi raczej to czego od niej wymagam. Nie rozumiem tylko dlaczego, gdy do ptr przypisze wynik tej funkcji, to ptr powinien wskazywać na adres zaalokowany przez malloc() wewnątrz tej funkcji.
W takim razie wykonanie free() na ptr jest wskazane kiedy nie potrzebuje już korzystać z tego stringa, problem polega na tym, że gdy jeszcze raz do ptr przypisze wynik mojej
String jest zakończony dobrze.
strncpy() przyjmuje trzy argumenty. CEL, ZRODLO oraz DLUGOSC.
ZRODLO oraz CEL to cstringi - char*.
DLUGOSC określa ile znaków ze ZRODLA mają być przekopiowane do celu.
W CELU funkcja ta szuka znaku \0, usuwa go, dodaje tyle znaków ze ZRODLA ile wynosi długość i dodaje na końcu \0.
Nie używa realloc(), CEL musi być odpowiednio duży by
Nadpisujesz pamięć bo za drugim razem malloc zwraca ci do pcDest ten sam adres i tam pierwszy null jest już na pozycji ostatniej możliwej. Przypisanie cchar następuje poza zasięgiem ptr.
Najlepiej po malloc wyzeruj pamięć.
Czyli tutaj wszystko działa.
Jak sprawdzałem przy pomocy printf("%p", ptr) to za każdym razem ptr wskazywał na inny adres.
Tutaj też wszystko