Size: a a a

IT KPI C/С++ ХВ (хорошо, что не UB)

2017 December 07

OS

Oleksandr Shaposhnikov in IT KPI C/С++ ХВ (хорошо, что не UB)
Ну вот вникай или не кастуй)
источник
2017 December 08

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Написав однозв'язний список. Чи оптимально я виділив пам'ять?
typedef struct node {
 int number;
 char *name;
 struct node *next;
} node;
node *init(int a, char *g)
{
 node *temp = (node *) malloc(sizeof(int) + sizeof(node *));
 temp->name = (char *) malloc(sizeof(g));
 temp->number = a;
 for(int i = 0; g[i] != '\n'; i++)
   temp->name[i] = g[i];
 temp->next = NULL;

 return (temp);
}
void pop(node **h)
{
 node *temp = (*h)->next;
 if(*h) free(*h);
 (*h) = temp;

 return;
}
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Здається десь витік пам'яті
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Не вистача
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
є досвіду
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
бросилось в глаза сразу копирование строки. Используй если не требуют другого функцию с string.h
char *strcpy(char *toHere, const char *fromHere);
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
char *strcpy (char *dst, const char *src);
dst — указатель на буфер назначения.
src — указатель на исходную строку.
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
так понятней
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Дякую за пораду, але як виділяти пам'ять?
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
на С пишешь?
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Поки так
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
будет напечатано 4 4 4, потому что в твоем случае sizeof(g) - g это указатель, а размер указателя постоянное число - 4))
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
источник

DS

Dmytro Skorobohatskyi in IT KPI C/С++ ХВ (хорошо, что не UB)
уже должно натолкнуть тебя на умные мысли)
источник

R

Ruslan in IT KPI C/С++ ХВ (хорошо, что не UB)
i mean it
Дякую за пораду, але як виділяти пам'ять?
node *temp = (node *) malloc(sizeof(int) + sizeof(node *));

Ви виділаєте недостатньо пам'яті для структури (треба ще під  name )

Як вже вказали, тут
temp->name = (char *) malloc(sizeof(g));
Ви завжди виділятимете пам'ять лише під вказівник g, для всієї строки треба знайти її довжину + 1 і виділити відповідну к-сть байт.

В pop() ви звільняєте пам'ять ноди
if(*h) free(*h);
Але перед цим забуваєте звільнити пам'ять, виділену для (*h)->name
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Про (*h)->name я знав, але про вказівник - ні
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
Зараз пограюсь з sizeof()
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
а й дійсно
источник

i

i mean it in IT KPI C/С++ ХВ (хорошо, что не UB)
ДУЖЕ дякую
источник

Y

Yuk🅾️ in IT KPI C/С++ ХВ (хорошо, что не UB)
Привіт, чуваки. Якщо вже зайшла мова про пам*ять, то прошу допомоги і для початківця) Під час виконання коду(кину файл далі) вилітає  така помилка. З роботою з пам*яттю ніби усе окей)
источник