使用Malloc时的安全错误



我在使用 malloc 时遇到了分段错误,我不确定是什么原因造成的(C 新手)打赌这是我错过的愚蠢的东西。

段错误发生在"printf("test")之前的行上;

编辑:要么我很困惑...或者它决定在打印段错误时进行更改,因为在我遵循建议的更改之一之后......它决定工作(该更改是在printf("测试")之后,感谢您的帮助

据我所知,它应该可以将 sizeof(int) 乘以 numitem 指向的值

但是段错误意味着它无法访问存储在某处的数据......

编辑:添加了我的其余代码:

#include <stdio.h>
#include <stdlib.h>
int * readIntFile(char[], int*);
int main(){

char fileName[255];
int *grades;
int *numItems = malloc(sizeof(int));
printf("Please input the file name you would like to open:");
scanf("%s", fileName);
printf("the input string is "%s"n ", fileName);
grades = readIntFile(fileName, (int*) numItems);
printf("%dnn", *grades); //I know this line only prints the first index, it's
                               //for testing
}
int * readIntFile( char fileName[], int *numItem ){
FILE *fp;
int holder;
*numItem = 0;
fp = fopen(fileName, "r");//open file to to read
while( fscanf(fp, "%d", &holder) == 1 && !feof(fp))
         (*numItem)++;
rewind(fp);
int *oneGrade = malloc(sizeof(int) * (*numItem));
printf("testn");
for(; fscanf(fp, "%d", *oneGrade) == 1 &&  !feof(fp); oneGrade++); 
return oneGrade;    


}

感谢您的任何帮助

编辑:我正在使用指针进行numItem,因为...按照赋值的规定,我必须能够在 main 中(以指定的方式)访问该值......我不能只是把它贴在一个年级的末尾并以这种方式返回:|

这是一个问题:

fscanf(fp, "%d", *oneGrade)

oneGrade是一个int *.因此,*oneGrade此时是一个随机值,更不用说不打算成为地址了。你可能想要fscanf(fp, "%d", oneGrade). fscanf需要指向要将值读入的位置的指针。

您还需要检查以确保*numItemmalloc之前大于零oneGrade

一个有用的建议,在取消引用指针之前,请始终检查指针:

if(oneGrade !=NULL)

现在,对于您的错误:

如果numItem在以下之后保持 0:

while( fscanf(fp, "%d", &holder) == 1 && !feof(fp))
         (*numItem)++;

这意味着,您malloc 0 bytes,并且malloc不会返回任何有效的地址,

int *oneGrade = malloc(sizeof(int) * (*numItem));

oneGrade不会指向任何有效的地址,当您拒绝它时,

for(; fscanf(fp, "%d", *oneGrade) == 1 &&  !feof(fp); oneGrade++); 

你会得到段错误。

相关内容

  • 没有找到相关文章

最新更新