2010-08-18 2 views
0

일부 문자를 버퍼에 추가 한 다음 함수를 호출하려고합니다. 하지만 여전히 제대로 함수를 호출하지 못했습니다. 나는 리눅스에서 일하고있다.공유 버퍼 프로세스

ERROR: q_add makes an integer without a cast. 

이 코드의 일부입니다

do { 
    printf("Enter shared buffer operation "); 
    printf("i(init)/a(add)/r(remove)/t(items)/d(delete)"); 
    scanf("%c%c", &op, &discard); 
    int a=1; 
    char n; 

    switch (op) 
    { 
     case 'i': 
       printf("Enter nnumber a leter here!"); 
       scanf("%c" &n) 
       q_add(a, &n); 
       break; 

     case 'a': 
       q_delete(); 
       break; 

     case 'r': 
       q_remove(a, &n); 
       break; 
     //------------------------------------------------------------------ 

해당 파일에 q_add()의 정의는 다음과 같습니다

void q_add(int n, char *x) 
{ 
    shbuf->count += n; 
    while (n-- > 0) 
    { 
     shbuf->buf[shbuf->inspos++] = *x++; 
     if (shbuf->inspos == QSIZ) 
      shbuf->inspos = 0; 
    } 
} 

그리고이 기능이 정말 작동하지 않습니다;

void q_delete() 
{ 
    if (-1 == shmctl(shmid, IPC_RMID, 0)) 
    { 
     perror("Can't remove shared mem"); 
     //exit(1); 
    } 
} 

답변

4

당신은 같은 함수를 호출 :

int a; 
char n; 
.... 
q_add(a, n); 

하지만 데프은 다음과 같습니다

void q_add(int n, char *x) 

그것은이 같은 char *을 기대 내가 출구 주석을 제거하면 오류가 발생합니다 두 번째 인수는 char입니다.

3

q_add(1, &n);?

+0

나는 이것을 시도하고 값을 입력하고 실행 한 후에 세분화 오류를 반환했습니다. –

+0

a를 아무 것도 유효하게 설정하지 않았습니다. 아마 그게 segfaulting 인 이유 일 것입니다. – JeremyP

+1

당신의 코드를 살펴보면 – JeremyP

관련 문제