2012-07-01 3 views
0

주에 나는 기능 A가 있다고 가정하자 a는 실제로 다음과 같습니다.오류 동안

void a(char* v) 
{ 
v[0] = 1; 
v[1] = 2; 
} 

이 프로그램은 c가이 함수에서 초기화되지 않는다고 말하기 때문에 잘못 되었습니까? 답변 해 주셔서 감사합니다.

편집 : 더 코드 :

byte* msg; 

insere_msg(t_msg, argv[2], msg); 

void insere_msg(int size, char name[MAX], byte* v) 
{ 
    FILE *fp; 
    int i = 10; 
    int n = 0; 
    char aux; 

    v[0] = (byte) 4; 
    v[1] = (byte) 8; 
    v[2] = (byte) 15; 
    v[3] = (byte) 16; 
    v[4] = (byte) 23; 
    v[5] = (byte) 42; 
    v[6] = (byte) size>>(3*8); 
    v[7] = (byte) size>>(2*8); 
    v[8] = (byte) size>>(1*8); 
    v[9] = (byte) size; 

    fp = fopen(name, "r"); 

    while(n < size) 
    { 
     fscanf(fp, "%c", &aux); 
     v[i] = (byte) aux; 
     i++; 
     n++; 
    } 
} 
+3

무엇을 V로 전달합니까? 이 변수를 선언하고 초기화 된 메모리를 가지고 있습니까? – Stephen

+3

코드를 더 게시하십시오. – houbysoft

답변

0

당신의 편집에서 찾고 : 당신은 어딘가의 malloc 명령을 사용하여 메모리를 할당해야합니다.

msg = (char *)malloc(sizeof(char) * atLeastThree); 

이제 msg가 할당되어 insere_msg 함수와 함수로 푸시 될 수 있습니다.

또한이 더 "안전한"코드를 구현해야합니다

void a(char * v, unsigned int sizeofV){ 
    if(NULL != v && sizeofV >= 3){ 
     v[0] = 1; 
     v[2] = 2; 
    }else{ 
     printf("array v is either not allocated or not of proper size"); 
    } 
} 
당신이 정말로 포인트 유형이 초기화되었는지 확인하기 위해 확인하고 당신이하려고하는 기능을 목적으로 유효한지해야한다

당신이 포인터에 의해 가리키고있는 데이터를 조작하기 전에, 추구!

지금 메모리를 할당하지 않으면 문제가 해결되지 않고 오류가 발생하지 않습니다.

EVEN SAFER 코드가 필요하면 할당되지 않은 포인터를 전달하고 함수가 크기를 할당하고 반환합니다. 여기있는 유일한 것은 호출자가 메모리 할당을 담당하는 경우입니다.

unsigned int a(char * v){ 

    v = (char *)malloc(sizeof(char) * Necessity); 

    if(NULL != v){ 
     v[0] = 1; 
     v[2] = 2; 
    }else{ 
     printf("array v is either not allocated or not of proper size"); 
    } 

    return Necessity; 
} 
+2

'sizeof v'는'char *'의 크기 (보통 4 또는 8)를 반환합니다. 포인터로 가리키는 메모리 블록의 크기를 결정하는 것은 불가능합니다. –

+0

AHHH, 오랜 시간 내 C 뼈대에 대해, 당신이 옳다면, 내 대답이 바뀔 것입니다. :-)이 사이트를 사랑해, 나는 내 머리 꼭대기에서 내가 아는 모든 것을 다시 배우게된다. – trumpetlicks