2010-02-17 6 views
3

GCC의 나는이 줄에 스택 덤프를 얻고있다중첩 된 구조 할당 메모리

C89 :

strcpy(comp->persons->name, "Joe"); 

그러나, 나는 할당 된 메모리, 그래서 그것을 얻고있을 이유 확실하지. 내가 여기서 뭔가를 놓치고 있니? 당신은 comp->person 메모리를 할당 할 필요가

당신은 회사의 구조에 대한 메모리를 할당하지만, EMP의 구조하지 않은 한

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

struct company 
{ 
    struct emp *persons; 
    char company_name[32]; 
}; 

struct emp 
{ 
    char name[32]; 
    char position[32]; 
}; 

int main(void) 
{  
    struct company *comp; 

    comp = malloc(sizeof *comp); 
    memset(comp, 0, sizeof *comp); 

    strcpy(comp->persons->name, "Joe"); 
    strcpy(comp->persons->position, "Software Engineer"); 

    printf("Company = [ %s ]\n", comp->company_name); 
    printf("Name ==== [ %s ]\n", comp->persons->name); 
    printf("Postion ==== [ %s ]\n", comp->persons->position); 

    free(comp); 

    return 0; 
} 

답변

5

당신은 persons 메모리를 할당해야합니다.

2

어떤 조언을

많은 감사 : comp->person = (struct emp*)malloc(sizeof(emp))

후 당신은 comp-> 사람에 저장된 메모리에 접근 할 수있다

2

"struc"의 "persons"필드에는 메모리가 할당되지 않는다. T 회사 구조. 당신이 그것을 위해 메모리를 할당한다면 그것은 괜찮을 것이다.

comp->persons = malloc(sizeof(struct emp) * NumberOfPersonsYouExpectToHave); 

을하고 나중에 메모리를 해제하는 것을 잊지 마세요 :

0

여기서 구조체 'persons'에 대한 메모리를 할당하지 않습니다.

struct 
{ 
    struct emp *persons; 
    char company_name[32]; 
} company; 

struct emp 
{ 
    char name[32]; 
    char position[32]; 
}; 

int main() 
{  
    int num_persons = 1; 
    company.persons = malloc(sizeof(struct emp)*num_persons); 
    if (NULL == company.persons) 
    { 
     printf ("\nMemory Allocation Error !\n"); 
     return 1; 
    } 
    strcpy(company.persons->name, "Joe"); 
    strcpy(company.persons->position, "Software Engineer"); 
    strcpy(company.company_name, "My_Company"); 
    printf("Company = [ %s ]\n", company.company_name); 
    printf("Name ==== [ %s ]\n", company.persons->name); 
    printf("Postion ==== [ %s ]\n", company.persons->position); 

    return 0; 
} 
:

나는 코드를 수정 한