除非我的程序尝试返回0时出现错误,否则一切似乎都运行正常:
Thread_1: signal SIGABRT
我不确定我做错了什么,但我认为可能是我如何使用我的指针(通过引用传递一组双打)。我相信它与我的记忆被释放有关,我有点新,所以很难搞清楚这一点。谢谢!
编辑:readGrades()从文本文件input.txt中读取4个整数,并将它们添加到传入的数组中
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
* readGrades()
* INPUT: double array of grades (double grades[])
* OUTPUT: number of grades read (int numOfGradesRead)
*/
int readGrades(double (*grades)[]) {
int numOfGradesRead = 0,
count = 0,
numRead;
char buf[1000];
FILE *file = fopen("input.txt", "r");
if (file == NULL) {
perror("Can't open file");
} else {
while (fgets(buf, sizeof(buf), file)) {
// Convert buf to integer
numRead = atoi(buf);
// Add number read to grades[]
if (numRead != -999) {
(*grades)[count] = numRead;
numOfGradesRead++;
count++;
}
}
}
fclose(file);
return numOfGradesRead;
}
void frequency(double grades[], int numOfGrades) {
}
int main() {
double grades[100];
int i;
// Initialize grades values to 0
for (i = 0; i < sizeof(grades)/sizeof(int); i++) {
grades[i] = 0;
}
int numOfGradesRead = readGrades(&grades);
for (i = 0; i < 4; i++) {
printf("%f", grades[i]);
}
return 0;
}
答案 0 :(得分:4)
主要错误是行:
for (i = 0; i < sizeof(grades)/sizeof(int); i++) {
由于该错误,您使用超出范围的索引设置grades
元素的值,这会导致未定义的行为。
应该是
for (i = 0; i < sizeof(grades)/sizeof(double); i++) {
// ^^^^^^^ Needs to be double not int
您可以使用惯例
for (i = 0; i < sizeof(grades)/sizeof(grades[0]); i++) {
让你的代码更健壮。
此外,您可能希望使用4
,而不是使用for
循环中的硬编码数numOfGradesRead
来打印成绩。此外,在等级之间打印空格或换行符以使输出更易于阅读。
for (i = 0; i < numOfGradesRead; i++) {
printf("%f\n", grades[i]);
}