공백을 구분 기호로 사용하여 문자열의 동적 배열로 stdin을 읽으려고합니다. 외부 배열 크기가 나는 표시 줄에서 세그먼트 오류를 얻을 아무것도에 20 개 이상의 변수를 성장하면동적으로 할당 된 2 차원 배열에 stdin을 읽으 려 할 때 시멘트 오류가 발생했습니다.
#include<stdio.h>
#include<stdlib.h>
char** parseInput(size_t *numElements)
{
char **lines;
int outerIndex = 0;
int innerIndex = 0;
int widths = 1;
char c=getchar();
lines =(char**) malloc((outerIndex+1)*sizeof(char*));
lines[0] = (char*) malloc(sizeof(char));
while(c!=EOF)
{
if(innerIndex==widths)//reallocate each strings length, double it
{
widths+=widths;
int i;
for(i=0;i<outerIndex+1;i++)
lines[i]=(char*)realloc(lines[i],(widths+1)*sizeof(char));
}
lines[outerIndex][innerIndex]=c;
innerIndex++;
if(c==' ')//allocate memory for the next string in the array of strings
{
lines[outerIndex][innerIndex]='\0';
innerIndex=0;
outerIndex++;
lines =(char**) realloc(lines,(outerIndex+1)*sizeof(char*));
lines[outerIndex] = (char*) realloc(lines[outerIndex],(widths+1)*sizeof(char));
//the above line in the debugger causes a segfault when outerIndex=19
}
c=getchar();
}
if(innerIndex!=0)//if the last character is not a space, append a space
{
if(innerIndex==widths)
{
widths+=widths;
int i;
for(i=0;i<outerIndex+1;i++)
lines[i]=(char*)realloc(lines[i],(widths+1)*sizeof(char));
}
lines[outerIndex][innerIndex]=' ';
lines[outerIndex][innerIndex+1]='\0';
}
*numElements=(size_t)(outerIndex+1);
return lines;
}
int main()
{
size_t num =0;
char** lines = parseInput(&num);
}
을 다음과 같이 코드입니다. 예를 들어 다음과 같은 입력은 segfault의
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
원인이 있지만, 다음은하지 않습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
디버그 오류가
Program received signal SIGSEGV, Segmentation fault.
0x0000003417e7bf4d in realloc() from /lib64/libc.so.6
이가 무엇을 발생할 수 있습니다 말한다? 어떤 도움을 주시면 감사하겠습니다. 이 라인에
죄송합니다. 필자는 붙여 넣기를하고, 컴파일하고, 실행했습니다.이 코드는 그대로이며 오류가 발생합니다. – cheesyfluff
GDB를 사용하는 법을 배우는 것이 좋습니다. 괜찮은 링크 http://www.delorie.com/gnu/docs/gdb/gdb_toc.html – Chimera