init 함수에 문자열을 전달하고 malloc의 구조체에 저장

알렉스 호프만

연결 목록의 첫 번째 노드를 초기화하는 init 함수를 작성 중입니다. 각 노드에 레이블을 지정하기 위해 문자열 이름을 추가하려고하지만 함수가 반환 될 때 이상한 동작이 발생합니다. 문자열을 함수에 직접 전달하고 동일한 길이의 다른 char *를 malloc 한 다음 입력 문자열을이 새 위치로 strcpy'ing합니다. 구조체 내의 char **에 저장하려고합니다. init 함수 내에서 구조체로 복사하지만 일단 문자열 변경을 반환하면 init 함수를 반환 할 때 메모리가 해제되는 것처럼 보입니다.

typedef struct {
    key_grid_TypeDef* grid;

    char** name;
    uint8_t ID;

    void* next;
    void* prev;
} keymap_layer;

keymap_err_TypeDef keymap_init( keymap_list* layer_list,
    key_grid_TypeDef* grid, char* layer_name ){

//init initial layer
    keymap_layer *layer = (keymap_layer*) malloc (sizeof(keymap_layer));
    if (layer == NULL)
        return km_init_err;

    char* mal_name = (char*) 
    malloc((strlen(layer_name)+1)*sizeof(char));
    if (mal_name == NULL)
        return km_init_err;
    strcpy(mal_name,layer_name);
    layer->name = &mal_name;

    if(sizeof(keymap0) == sizeof(*layer->grid))
        memcpy(&layer->grid, &grid, KEYBOARD_ROWS * KEYBOARD_COLS);
    else{
        free(layer);
        return km_init_err;
}

return km_ok;}

내 임무에서

ret = keymap_init(&key_layer_list, &keymap0, "Initial layer");

감사

Jabberwocky

이것은 매우 비린내입니다.

char* mal_name = (char*) malloc((strlen(layer_name)+1)*sizeof(char));
if (mal_name == NULL)
    return km_init_err;
strcpy(mal_name,layer_name);
layer->name = &mal_name;

지역 변수 mal_namekeymap_init함수가 종료 되는 즉시 존재하지 않으므로 해당 변수에 대한 포인터를 저장합니다.

다음을 수행해야합니다.

typedef struct {
    ...    
    char* name;   // just a simple pointer to char
    ...
} keymap_layer;

...
layer->name = malloc((strlen(layer_name)+1)*sizeof(char));
strcpy(layer->name, layer_name);

layer->name나중에 저장된 문자열을 변경하려면을 사용하십시오 realloc.

예를 들면 :

...
layer->name = realloc(layer->name, (strlen(new_name)+1)*sizeof(char));
strcpy(layer->name, new_name);
...

Disclamer : 간결성을 확인하는 오류가 없습니다.

BTW : malloc의 반환 값을 캐스팅하지 않습니다 friends.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

구조체의 문자열을 함수에 전달하고 반환

분류에서Dev

문자열을 클래스에 전달하고 eeprom에 저장

분류에서Dev

strtok를 사용하여 문자열을 분리하고 구조체에 저장

분류에서Dev

r-dplyr 함수의 변수에 저장된 문자열 전달

분류에서Dev

R의 함수 내에서 문자열을 사용하여 변수에 이름을 할당하고 저장

분류에서Dev

C의 구조체에 문자열을 전달하는 함수가 있습니까?

분류에서Dev

C의 구조체에 저장된 함수 배열의 함수 사용

분류에서Dev

이진 파일을 읽고 c의 구조체에 저장

분류에서Dev

구조체의 배열을 함수에 인수로 전달

분류에서Dev

ofstream을 함수에 전달하고 멤버 변수에 저장하는 방법

분류에서Dev

constexpr 구조체에 문자열 저장

분류에서Dev

문자열을 연결하고 ANSI C의 버퍼에 저장

분류에서Dev

malloc () 및 realloc ()을 사용하여 문자열을 배열에 저장

분류에서Dev

datepicker의 값을 문자열 변수에 저장하는 방법

분류에서Dev

장고 : ChoiceField 선택을 양식의`__init __ ()`에 위치 인수로 전달하면 AttributeError가 발생합니다.

분류에서Dev

json_encoded 배열의 Json_decode 값을 전달하고 데이터베이스에 저장하면 gettype 반환 문자열

분류에서Dev

파일에서 문자열을 검색하고 c를 사용하여 구조체에 저장

분류에서Dev

경고 함수에 문자열을 전달하여 경고

분류에서Dev

C의 값으로 함수에 구조체 배열 전달

분류에서Dev

파일을 구문 분석하고 각 줄의 변수에 일치 후 문자열 저장

분류에서Dev

문자열을 토큰 화하여 C ++의 구조체에 전달할 수 없습니다.

분류에서Dev

인수로 전달 된 구조체의 배열의 malloc

분류에서Dev

포인터에 문자열을 저장하고 malloc을 사용하여 재정의하려면 어떻게해야합니까? 씨

분류에서Dev

참조에 의한 전달 매개 변수가 피 호출자 객체에 저장되고 호출자가 삭제하면 어떻게됩니까?

분류에서Dev

문자열 배열의 문자열을 C의 변수에 저장하는 방법

분류에서Dev

C의 구조체를 사용하여 동적 배열에 데이터 저장

분류에서Dev

C의 구조체를 사용하여 동적 배열에 데이터 저장

분류에서Dev

함수에 구조체 배열 전달

분류에서Dev

문자열에 문자가 포함되어 있는지 확인하고 2 개의 개별 변수에 값을 저장하는 방법

Related 관련 기사

  1. 1

    구조체의 문자열을 함수에 전달하고 반환

  2. 2

    문자열을 클래스에 전달하고 eeprom에 저장

  3. 3

    strtok를 사용하여 문자열을 분리하고 구조체에 저장

  4. 4

    r-dplyr 함수의 변수에 저장된 문자열 전달

  5. 5

    R의 함수 내에서 문자열을 사용하여 변수에 이름을 할당하고 저장

  6. 6

    C의 구조체에 문자열을 전달하는 함수가 있습니까?

  7. 7

    C의 구조체에 저장된 함수 배열의 함수 사용

  8. 8

    이진 파일을 읽고 c의 구조체에 저장

  9. 9

    구조체의 배열을 함수에 인수로 전달

  10. 10

    ofstream을 함수에 전달하고 멤버 변수에 저장하는 방법

  11. 11

    constexpr 구조체에 문자열 저장

  12. 12

    문자열을 연결하고 ANSI C의 버퍼에 저장

  13. 13

    malloc () 및 realloc ()을 사용하여 문자열을 배열에 저장

  14. 14

    datepicker의 값을 문자열 변수에 저장하는 방법

  15. 15

    장고 : ChoiceField 선택을 양식의`__init __ ()`에 위치 인수로 전달하면 AttributeError가 발생합니다.

  16. 16

    json_encoded 배열의 Json_decode 값을 전달하고 데이터베이스에 저장하면 gettype 반환 문자열

  17. 17

    파일에서 문자열을 검색하고 c를 사용하여 구조체에 저장

  18. 18

    경고 함수에 문자열을 전달하여 경고

  19. 19

    C의 값으로 함수에 구조체 배열 전달

  20. 20

    파일을 구문 분석하고 각 줄의 변수에 일치 후 문자열 저장

  21. 21

    문자열을 토큰 화하여 C ++의 구조체에 전달할 수 없습니다.

  22. 22

    인수로 전달 된 구조체의 배열의 malloc

  23. 23

    포인터에 문자열을 저장하고 malloc을 사용하여 재정의하려면 어떻게해야합니까? 씨

  24. 24

    참조에 의한 전달 매개 변수가 피 호출자 객체에 저장되고 호출자가 삭제하면 어떻게됩니까?

  25. 25

    문자열 배열의 문자열을 C의 변수에 저장하는 방법

  26. 26

    C의 구조체를 사용하여 동적 배열에 데이터 저장

  27. 27

    C의 구조체를 사용하여 동적 배열에 데이터 저장

  28. 28

    함수에 구조체 배열 전달

  29. 29

    문자열에 문자가 포함되어 있는지 확인하고 2 개의 개별 변수에 값을 저장하는 방법

뜨겁다태그

보관