int samples_to_read = 7200;
uint8_t **caculate_a;
int count2,count3;
caculate_a = (uint8_t **)malloc(sizeof(uint8_t *)* 3);
for (count1 = 0; count1<3; count1++){ //动态数组分配空间
caculate_a[count1] = (uint8_t *)malloc(sizeof(uint8_t)*samples_to_read);
}
for (count2 = 0; count2 < 3; count2++){
for (count3 = 0; count3 < samples_to_read; count3++){
fread(&(caculate_a[count3][count2]), sizeof(uint8_t), 3 * samples_to_read, fp); //疑问位置
printf("%d ", &caculate_a[count2][count3]);
}
}
for (count1 = 0; count1 < 3; count1++){ //释放
free(caculate_a[count1]);
}
free(caculate_a);
}
这段代码,在运行fread的时候需要元素需要
fread(&(caculate_a[count3][count2]), sizeof(uint8_t), 3 * samples_to_read, fp);
且读出(打印)caculate[count2][count3]才能打印得到正确的数据,但读入6个数据之后在输出栏内提示
Critical error detected c0000374
再按F10进行单步调试则得到堆栈损坏的提示如下:
2.使用合乎逻辑的读入方法(对应元素):
fread(&(caculate_a[count2][count3]), sizeof(uint8_t), 3 * samples_to_read, fp);
则可顺利完成3*7200信息的录入,但数据仅第一个为正确的.
后采取长度为21600的一维数组进行验证,结果也与二维数组fread第二种结果相同,即无法得到正确数据;
第一次在这提问,求指点
caculate_a[count3][count2]
你这个数组下标用反了吧,是caculate_a[count2][count3]吧
说错了,从你这代码看,应该不需要双重循环啊。
for (count2 = 0; count2 < 3; count2++){
fread(&(caculate_a[count2]), sizeof(uint8_t), 3 * samples_to_read, fp);
就可以了吧
仔细读了一遍,发现是我对fread的理解有偏差
size_t fread( void *buffer, size_t size, size_t count,FILE *stream );
格式如上,第三个元素是读入的数据字节数,在我的程序中应该将它设为1(循环了3* samples_to_read次),就可以得到结果了(如下)
fread(&(caculate_a[count2][count3]), sizeof(uint8_t), 3 sizeof(uint8_t), fp);