2013-05-31 4 views
0

할당 근처에서 프로그램이 충돌합니다. 어떻게 작동시킬 수 있습니까? 미리 감사드립니다. 재 게시하는 경우 미안 해요. 비슷한 예를 어디서나 찾을 수 없습니다.C 포인터 선언을 사용하는 동적 구조체 할당

#include <stdio.h> 

typedef struct _kv 
{ 
    char *key; 
    char *value; 
} _kv; 

typedef struct _kvs 
{ 
    _kv *kv; 
    int size; 
} _kvs; 

main() 
{ 
    _kvs a; 

    a.kv[0].key  = "This is key One"; 
    a.kv[0].value = "This is value One"; 

    a.size = 1; 

    printf("%s = %s\n", a.kv[0].key, a.kv[0].value); 
} 

답변

1

포인터를 만들었지 만 메모리 공간을 확보하지 못했습니다. 가능하면 malloc을 사용하여 일부 메모리를 포인터와 연관시켜야합니다.

a.size = 1; 
a.kv = malloc (a.size * sizeof (_kv)); 
int i; 
const int string_sz = 80; // Or whatever else the string size should be 
for (i = 0; i < a.size; i++) 
{ 
    a.kv[i].key = malloc (string_sz); 
    a.kv[i].value = malloc (string_sz); 
} 

strcpy (a.kv[i].key, "This is key one"); 
strcpy (a.kv[i].value, "This is value one"); 
0

초기화되지 않은 포인터는 먼저 그들이 올바른 메모리 가리 있는지 확인해야합니다, deferenced 할 수 없습니다.

_kvs a; 

a.kv = malloc(1 * sizeof *a.kv); /* Allocate a single _kv. */ 
a.kv[0].key = "key"; 
a.kv[0].value = "value"; 
a.size = 1; 

아니면 스택에 메모리를 사용할 수 있습니다

_kv my_kvs[1]; 
_kvs a; 

a.kv = my_kvs; 
a.kv[0].key = "key"; 
a.kv[0].value = "value"; 
a.size = 1;