c언어 fgets 시 코어
안녕하세요~
fgets에서 코어덤프가 발생합니다 .
소스가 너무 길어서 일단 발생하는 부분만 간단히 올려드릴게요ㅠㅠ
/* Data Set */
memset(fread, 0x00, sizeof(fread));
offset = 124;
while((char*)fgets(fread, sizeof(fread), fp1) != (char*)NULL )
{
memset(ctmpstr, 0x00, sizeof(ctmpstr));
memcpy(ctmpstr, fread, 6);
if (strncmp(ctmpstr, DID, 6) != 0)
{
continue;
}
.....
}
아래는 코어 내용입니다.
gdb) where
#0 0x00007f38dc58e369 in _IO_fgets (
buf=0x7ffd55911980 " fileload USR_P 1427 32 ( 4) nR RUN 10/10 \n", n=1024, fp=0x2218a30)
at iofgets.c:50
#1 0x00000000004028e8 in lf_StatWrite () at lf_utils.c:74
#2 0x0000000000401509 in CruzAPM_Send () at lf_UDP.c:40
#3 0x000000000040127a in main () at CruzApm.c:36
원래 기존엔 빅데이터도 잘 처리하다가 쓰레드 쓰면서 발생하기 시작한건지 ..
하도 수정을 많이 해서 찾기가 어렵네요..
혹시 몰라 쓰레드 함수를 다 막아도 발생하네요 .
서버는 SENTOS 7입니다.
더 필요하신 거 있으시면 댓글 남겨주세요ㅠㅠ
...
아마도 그게 문제일 것 같지만 최소한 fread와 cmpstr이 char 배열인지 포인터인지 정도는 올려주셔야... -_-
char *로 정의되어 있으면 sizeof(fread)는 그 포인터 자체의 크기이기 때문에 당연히 원하시는 동작을 하지 않습니다.
* 그리고 fread는 원래 stdio.h에 정의된 함수 이름인데요. 뭐 변수 이름으로 쓰면 안된다는 법은 없지만...;;;
' 0x00000000004028e8 in lf
' 0x00000000004028e8 in lf_StatWrite () at lf_utils.c:74' 에 있는 것이 적으신 그 코드가 맞다면,
gdb 가 보여 준 것과 코드를 대조해 볼 때, 잘못될만한 것은 fp 뿐입니다.
댓글 달기