我动态分配了一个2D数组,用双指针访问,如下所示:
float **heat;
heat = (float **)malloc(sizeof(float *)*tI); // tI == 50
int n;
for(n = 0; n < tI; n++){ // tI == 50
heat[n] = (float *)malloc(sizeof(float)*sections); // sections == 30
}
在用值填充所有元素之后(我确定它们都被正确填充),我是 试图将其输出到如下文件:
fwrite(heat, sizeof(heat[tI-1][sections-1]), ((50*30)-1), ofp);
我也尝试过:
fwrite(heat, sizeof(float), ((50*30)-1), ofp);
我是否正在尝试输出这个2D数组?
我知道我的文件I / O正常工作(文件指针ofp不为空,并以十进制方式写入文件),但是当我尝试使用时,非常奇怪的字符和消息正在输出到我的输出文件fwrite以二进制编写。
我知道heat[tI-1][sections-1]
也确实在2D数组的范围内。我刚刚使用它,因为我知道这是我持有的最大元素。
我的输出是很多NULL,有时是奇怪的系统路径。
答案 0 :(得分:6)
我知道你应该使用:
for(int n = 0; n < tI; n++)
{
fwrite(heat[n], sizeof(float),sections, ofp);
}
答案 1 :(得分:5)
你无法一次性写出来,因为热量数组中的每个项目都分配了一个单独的内存段。您需要遍历热量阵列并一次保存一个部件。
你需要做更多这样的事情:
for (n = 0; n < tI; n++)
fwrite(heat[n], sizeof(float), sections, ofp);