나는 주요 이중 포인터를 선언하고 내가 함수에이 배열을 통과 한이libc의 감지 *** ./textfileread.exe : realloc을() : 유효하지 않은 다음 크기 : 0x08643008
char **group_name;
group_name = realloc(NULL, 1);
group_name[0] = realloc(NULL ,20);
처럼 메모리를 할당 한
group_count(object, count, group_name);
realloc을 사용합니다. 첫 번째 네 개의 재 할당이 채워질 때까지 벌금이 부과되지만, 다섯 번째 오류가 발생하면 벌금이 부과됩니다.
libc detected *** ./textfileread.exe: realloc(): invalid next size: 0x08643008
int group_count(struct friends obj[], char cn, char **grp_nm)
{
int i=0,j=0;
int grp_cn=0;
char check=0;
strcpy(grp_nm[0],obj[0].group);
grp_cn++;
grp_count++;
for(i=1;i<cn;i++) {
for(j=0;j<grp_cn;j++) {
if(strcmp(grp_nm[j],obj[i].group)==0)
check=1;
}
if(check==0) {
grp_cn++;
grp_count++;
printf("\t%d\n",grp_cn);
grp_nm = realloc(grp_nm, grp_cn); //at grp_cn=5 allocation gives error
printf("\t%d\n",grp_nm);
if(grp_nm == NULL) printf("\t%d\n",grp_cn); // this 'if' didnt run, means no NULL return
grp_nm[grp_cn-1] = realloc(NULL ,20);
strcpy(grp_nm[grp_cn-1],obj[i].group);
}
check=0;
}
}
printf ("\ t % d \ n", grp_nm)의 출력; 화면에 출력 5 이후에 재 할당
2
140783624
3
140783624
4
140783624
5
*** glibc detected *** ./textfileread.exe: realloc(): invalid next size: 0x099c8008 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x17b961]
lib/i386-linux-gnu/libc.so.6(+0x6f1ad)[0x17f1ad]
/lib/i386-linux-gnu/libc.so.6(realloc+0xe9)[0x180579]
./textfileread.exe[0x804934e]
./textfileread.exe[0x8048b42]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x126e37]
./textfileread.exe[0x8048751]
======= Memory map: ========
00110000-0026a000 r-xp 00000000 08:02 1570626 /lib/i386-linux-gnu/libc-2.13.so
의 5 번 반복에 후, 아래, 그것은 4. 이후 표시된 주소가 표시되어야하지만 일부러, 왜 5에서 그 오류를 줄?
오히려 printf와 사용하도록 ("% P는"grp_nm) 포인터를 표시합니다. 의미있는 형식을 사용하고 ptr-int 암시 적 캐스팅에 대한 경고를 피하며 int/pointer 크기가 다른 시스템에서 코드를 사용하는 경우 출력을 휴지통에 버리지 않습니다. – PypeBros