У меня возникает ошибка сегментации при запуске prog.c. Я обнаружил, что это что-то с моим * char. Вот код.Ошибка сегментации на char
prog.c
#include <stdio.h>
#include "worker.h"
#include "manager.h"
#include "employee.h"
int main(int argc, char **argv) {
int i;
Worker boss = (Worker) new_Manager("Carl Cracker", 80000, 1987, 12, 15);
return 0;
}
worker.h
#ifndef _WORKER_H_
#define _WORKER_H_
#define WORKER char *name; \
double salary; \
long hireDay; \
void (*raiseSalary)(Worker this, double byPercent);
typedef struct Worker_struct* Worker;
struct Worker_struct {
WORKER;
} Worker_struct;
void raiseSalary(Worker this, double byPercent);
#endif
worker.c
#include <stdio.h>
#include <stdlib.h>
#include "worker.h"
void raiseSalary(Worker this, double byPercent) {
Worker worker = (Worker) this;
printf("worker_c: raising salary\n");
double raise = worker->salary * byPercent/100;
worker->salary = worker->salary + raise;
}
manager.h
#ifndef _MANAGER_H_
#define _MANAGER_H_
#include "worker.h"
typedef struct Manager_struct* Manager;
struct Manager_struct {
WORKER;
double bonus;
void (*setBonus)(Worker this, double b);
} Manager_struct;
Manager new_Manager(char *name, double salary, int year, int month, int day);
#endif
manager.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include "manager.h"
static void setBonus(Worker this, double b) {
Manager manager = (Manager) this;
manager->bonus = b;
}
Manager new_Manager (char *name, double salary, int year, int month, int day) {
Manager manager;
strcpy (manager->name, name);//----i think my problem is here----
manager->salary = salary;
manager->bonus = 0;
manager->setBonus = setBonus;
manager->raiseSalary = raiseSalary;
return manager;
}
Я думаю, что моя проблема заключается в manager.c в зЬгсру. Что я делаю не так?
Я переехал все из РАБОТНИКА и в Worker_struct и Manager_struct, но я получаю ту же ошибку Сегментация – user821863
@ user821863 также вы не выделенной памяти для 'manager' в' newManager' – keety
Я добавил «таНос (STRLEN (имя + 1)); но такая же ошибка – user821863