2017-02-28 1 views
2

구조체에 char 포인터가 있습니다. 이 구조체 멤버에 정적 메모리를 할당하려고합니다. 어떻게해야합니까?C에서 구조체에 정의 된 문자 포인터에 정적 메모리 할당

예 :

struct my_data { 
    int x; 
    bool y; 
    char *buf; 
}; 

방법이 문자 포인터에 10 바이트 정적 메모리를 할당? 내가 동적 메모리 할당을 할당 malloc 알아. 이거 괜찮아?

struct my_data data; 
char buffer[10]; 
data.buf = &buffer[0]; 

추신 :이 구조체를 변경하고 동적 메모리를 할당하기 위해 malloc을 사용할 수 없습니다. buffer가 끊임없이 지속되는 수명이 있어야합니다 또는 당신이 어디에가 (즉 루틴을 해제 아니에요 있는지 확인해야합니다

data.buf = buffer; 

참고 : (배열이 자동으로 포인터 붕괴)도 간단합니다

+0

정적이란 프로그램의 전체 실행 시간 동안 지속되어야한다는 의미입니까? 그리고 당신이 한 것은 합법적 인 것이지만 그것이 올바른지 여부는 귀하의 어플리케이션 요구 사항에 달려 있습니다. – StoryTeller

+0

감사합니다. @StoryTeller. – mehtame026

답변

3

신고 된 반품)을 사용하거나 참조하는 동안

서브 루틴에서 할당 한 후 돌아 오면 메모리가 반환 될 때 할당 취소되므로 미숙 한 동작이 발생합니다. UB 이런 종류의 도입

struct my_data foo() 
{ 
struct my_data data; 
char buffer[10]; 
data.buf = &buffer[0]; 
return data; 
} 
int main() 
{ 
    struct my_data d = foo(); // buffer is already gone 

버그가 불쾌한있는 코드가 잠시 동안 작동하는 것 같다 때문에, 때까지 (우리가 여기 자주 질문에서 보는 바와 같이) 이렇게하지 예를 를 들어

할당되지 않은 버퍼는 다른 함수 호출에 의해 clobbered됩니다.

+0

설명을 위해 @Jean을 감사합니다. 너의 요점이있어. – mehtame026

관련 문제