У меня есть 2D VLA, который содержит X строк и 6 столбцов.
Эта функция SaveInfo сохраняет значения в каждом столбце для каждой строки и печатает функцию в текстовом файле.
Все печатается правильно, за исключением последнего столбца "Выплачено процентов"
Что может быть причиной этой проблемы? Может ли это быть, где я освобождаю память для printArray? В настоящее время он находится внизу моей основной функции
Вот объявление массива в main:
double **printArray = malloc(arrSize * sizeof *printArray);
for(int i = 0; i < arrSize; i++) {
printArray[i] = malloc(arrSize * sizeof *printArray[i]);
}
void SaveInfo(double interestRate, int duration, double principalAmt, double monthlyPayment, double** printArray) {
double remainingBalance = principalAmt;
double monthlyPrinciple;
double totalPaid = 0;
double interestPaid;
double monthlyInterest;
//open file in write mode
FILE *p;
p = fopen("outputFile.txt", "w");
//With every month as a row, assign variable values to column in current row (month)
for(int i = 0; i < duration * 12; i++) {
printArray[i][0] = i + 1;
monthlyInterest = (interestRate/12) * remainingBalance;
printArray[i][1] = monthlyInterest;
monthlyPrinciple = monthlyPayment - monthlyInterest;
printArray[i][2] = monthlyPrinciple;
remainingBalance = remainingBalance - monthlyPrinciple;
printArray[i][3] = remainingBalance;
totalPaid = totalPaid + monthlyPayment;
printArray[i][4] = totalPaid;
interestPaid = interestPaid + monthlyInterest;
printArray[i][5] = interestPaid;
}
//Print printArray using nested loop
fprintf(p, "%-7s %-14s %-14s %-14s %-14s %-14s", "Month", "Interest", "Principal", "Balance", "Total Paid", "Interest Paid");
fprintf(p, "\n");
for(int i = 0; i < duration * 12; i++) {
for(int j = 0; j < 6; j++) {
if(j == 0) {
fprintf(p, "| %-3.0lf | ", printArray[i][j]);
}
else {
fprintf(p, "| %10.2lf | ", printArray[i][j]);
}
}
fprintf(p, "\n");
}
}
Month Interest Principal Balance Total Paid Interest Paid
| 1 | | 4.17 | | 81.44 | | 918.56 | | 85.61 | | -1.#R |
| 2 | | 3.83 | | 81.78 | | 836.78 | | 171.21 | | -1.#R |
| 3 | | 3.49 | | 82.12 | | 754.66 | | 256.82 | | -1.#R |
| 4 | | 3.14 | | 82.46 | | 672.20 | | 342.43 | | -1.#R |
| 5 | | 2.80 | | 82.81 | | 589.39 | | 428.04 | | -1.#R |
| 6 | | 2.46 | | 83.15 | | 506.24 | | 513.64 | | -1.#R |
| 7 | | 2.11 | | 83.50 | | 422.74 | | 599.25 | | -1.#R |
| 8 | | 1.76 | | 83.85 | | 338.89 | | 684.86 | | -1.#R |
| 9 | | 1.41 | | 84.20 | | 254.70 | | 770.47 | | -1.#R |
| 10 | | 1.06 | | 84.55 | | 170.15 | | 856.07 | | -1.#R |
| 11 | | 0.71 | | 84.90 | | 85.25 | | 941.68 | | -1.#R |
| 12 | | 0.36 | | 85.25 | | -0.00 | | 1027.29 | | -1.#R |