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