Я не совсем уверен, почему это не возвращает того, что должно быть, возможно, один из вас мог бы помочь мне. У меня есть следующее для цикла в C:
for (i=0; i<nrow; i++) {
dat[k]=l.0;
k++;
}
Теперь вы могли бы подумать, что это установит все значения dat
(из которых есть значения nrow
) в 1,0; Вместо этого он устанавливается в 0. Программа компилируется нормально, и все идет гладко. Память правильно распределена, и dat
определяется как double
.
Есть ли причина, по которой это дает 0? Я предполагаю, что 0 исходит из инициализации переменной dat
(поскольку я использовал calloc
для выделения памяти, которая предположительно инициализирует переменные в 0 (но не всегда)).
РЕДАКТИРОВАТЬ: Обратите внимание, что есть конкретная причина (это важно), что я не определяю это как dat[i]
. Дополнительно. k
был определен как целое число и был инициализирован как 0.
РЕДАКТИРОВАТЬ 2: Ниже весь код:
#include "stdio.h"
#include "stdlib.h"
#define NCH 81
// Generate swap-mode data for bonds for input.conf file
int main()
{
int i,j,k;
int **dat2;
double *dat;
int ns = 500;
int nrow = NCH*(ns-1);
dat = (double*) calloc(nrow, sizeof(double));
dat2 = (int**) calloc(nrow,sizeof(int*));
/*for (i=0; i<nrow; i++) {
dat2[i] = (int*) calloc(2, sizeof(int));
for (j=0; j<2; j++)
dat2[i][j] = 0;
}*/
k=0;
printf("\nBreakpoint\n");
/*for (i=0; i<81; i++) {
for (j=0; j<250; j++) {
dat[k] = j+1;
k++;
}
for (j=251; j>1; j++) {
dat[k] = j-1;
k++;
}
}*/
FILE *inp;
inp = fopen("input.out", "w");
for (i=0; i<nrow; i++) {
dat[k]=1.0;
k++;
}
//fprintf(inp, "%lf\n", dat[i]);
printf("%d", dat[nrow]);
printf("\nDone\n");
fclose(inp);
return 0;
}
Спасибо!
Amit