Malloc不分配空间

Malloc不分配空间,c,string,pointers,malloc,C,String,Pointers,Malloc,我正在尝试编写一个C程序,从文件中动态读取输入。输入文件中的数据不在固定列中,它们用“:”分隔。我正在读取输入文件中的每一行,并将其传递给以下函数,以便根据“:”进行拆分,并返回一个字符串数组。已定义char**stringArray以将字符串列表返回主程序。但是我的程序在下面的malloc步骤中停止,没有抛出任何错误 有人能指出这个空间分配有什么问题吗 char **splitString(char *inputString, char delim) { int cur_size=10

我正在尝试编写一个C程序,从文件中动态读取输入。输入文件中的数据不在固定列中,它们用“:”分隔。我正在读取输入文件中的每一行,并将其传递给以下函数,以便根据“:”进行拆分,并返回一个字符串数组。已定义char**stringArray以将字符串列表返回主程序。但是我的程序在下面的malloc步骤中停止,没有抛出任何错误

有人能指出这个空间分配有什么问题吗

char **splitString(char *inputString, char delim)
{
    int cur_size=100,i=0;
    char **stringArray;
    printf("in splitstring, input read : %s\n",inputString);
    if (NULL==(stringArray=(char **)malloc(cur_size*sizeof(char *)))){
        fprintf(stderr,"%s","Error while allocating space while split string");
    }
    printf("%s\n","in splitstring, space allocated");
    return stringArray;
}
输入文件:

XX1701:x:11701:601:Name 1:/folder1/subfolder/subsubfolder1:/bin/bash
XX1702:x:11702:601:Name 2 Title:/folder1/subfolder/subsubfolder 2:/bin/bash
XX1703:x:11703:601:Name 3 Title 3:/folder1/subfolder/subsubfolder3:/bin/bash
从程序输出,我得到:

$ ./sortStudent
In main , input read : XX1701:x:11701:601:Name 1:/folder1/subfolder/subsubfolder1:/bin/bash
in splitstring, input read : XX1701:x:11701:601:Name 1:/folder1/subfolder/subsubfolder1:/bin/bash
$
主要内容:

int main(int argc,char *argv[])
{
    char *inputLine, **inputSplit;
    FILE *fptr;
    char *filename = "studentInput.txt";
    int allocated_size=100,i,j,rc=0;

    if (NULL == (fptr= fopen(filename,"r"))){ // Opens file in read mode and checks file open error
        fprintf(stderr,"\nError in opening file %s",filename);
        return -1;
    }

    if (NULL==(inputLine=(char *)calloc(1000,sizeof(char)))){
        fprintf(stderr,"%s\n","Error in calloc");
        return -1;
    }

    while (NULL!=fptr){
        rc=getInput(fptr, &inputLine, '\n');
        if (-1==rc){
            return -1;
        }
        if (1==rc){
            break;
        }
        printf("In main , input read : %s\n",inputLine);
        inputSplit = splitString(inputLine, ':');
        printf("In main, input split : %s %s %s\n",inputSplit[0],inputSplit[2],inputSplit[4]);
     return 0;
}
获取输入:

int getInput(FILE * filePointer, char **storeStr,char endChar)
{
    int i=0,c,cur_size=1;
    if(NULL==(*storeStr = (char *)malloc(cur_size*sizeof(char)))){
        fprintf(stderr,"%s","Error in malloc inside getInput function");
        return -1;
    }
    if (EOF==(c=fgetc(filePointer))){
        return 1;
    }
    (*storeStr)[i]=c;
    for (i=1;EOF!=(c=fgetc(filePointer)) && (c)!=endChar;i++){ // Read next character from input until end string is reached

        if ((i+1) <= cur_size){
            cur_size *=2;
            if(NULL==(*storeStr = (char *)realloc(*storeStr,cur_size))){
                fprintf(stderr,"%s","Error in realloc inside getInput function");
                return -1;
            }
        }
        (*storeStr)[i]=c;
    }

    (*((*storeStr)+i))='\0';    // Add null char to denote end of string
    return 0;
}
intgetInput(FILE*filePointer,char**storeStr,char endChar)
{
int i=0,c,cur_size=1;
if(NULL=(*storeStr=(char*)malloc(cur_size*sizeof(char))){
fprintf(stderr,“%s”,“getInput函数内malloc出错”);
返回-1;
}
如果(EOF==(c=fgetc(文件指针))){
返回1;
}
(*storeStr)[i]=c;
对于(i=1;EOF!=(c=fgetc(filePointer))&&&(c)!=endChar;i++){//从输入中读取下一个字符,直到到达结束字符串为止

if((i+1)内存分配错误通常不会在错误发生时出现,而是在稍后的某个时间出现。这里就是这样

getInput
中,执行此检查以查看是否需要扩展缓冲区:

if ((i+1) <= cur_size){

此外,您没有在
splitString
中设置
stringArray
的成员,因此您需要添加代码来填充这些成员。

请包含
main
函数(以及任何其他支持函数),以便我们能够完整了解您正在执行的操作。“程序正在malloc步骤中停止”不太可能。您是如何确定的?@dxiv:malloc前面的print语句显示在输出中,malloc后面的print语句不显示在输出中。@dbush:Added all details@SuktiSen 1)
inputspilt=splitString(…
这将
inputspilt
设置为指向
100
未初始化指针的数组。2)
printf(“在main中,输入拆分:%s…
这会尝试打印一些未初始化的指针,这会导致错误。
if ((i+1) >= cur_size){