Miałem problemy naprawić kod dzisiaj, potem natknąć się coś podobnego do:przydzielić pamięci dla struktury ze wskaźnikiem znaków w C
typedef struct {
int a;
int b;
int c;
int d;
char* word;
} mystruct;
int main(int argc, char **argv){
mystruct* structptr = malloc(sizeof(mystruct));
if (structptr==NULL) {
printf("ERROR!")
...
}
...
free(structptr);
return 0;
}
kod został dając dużą ilością błędów pamięci ze względu na fakt, , że char* word
jest ciągiem o zmiennej długości, a malloc nie alokował dla niego wystarczającej ilości pamięci. W rzeczywistości przydzielono tylko 20 Bytes
dla całego struct
. Czy istnieje sposób obejścia tego problemu, bez przekształcania char*
w coś takiego jak char word[50]
?
Widziałeś, że masz komentarz, ale potem go usunąłeś. Zmień swoje pytanie, podając dodatkowe informacje lub prześlij drugie pytanie. Istnieją metody radzenia sobie z wektorem 'char', który zmienia swoją długość. – JackCColeman
Dodałem komentarz, a następnie znalazłem odpowiedź w komentarzach poniżej. Uważam, że ustalony rozmiar bufora jest w rzeczywistości najlepszym rozwiązaniem, ponieważ słowo będzie reprezentować nazwę, a nazwy nie powinny być tak długie jak powieści;). Dzięki za pomoc.Byłem naprawdę ciekawy, jak przydzielić pamięć dla zmiennych ciągów, dlatego zapytałem. Ale i tak zamierzałem przejść na tablice o stałej długości. –
w tych dniach przestrzeń (czyli pamięć RAM) jest obfita, więc w większości przypadków definiowanie tablicy znaków o wielkości 1024 nie spowoduje problemu. Bufory we/wy są rutynowo znacznie większe. – JackCColeman