C++给数组赋值后不确定

潇湘夜雨~ 2019-10-14 11:24:59
pcap_file_header pfh;
pcap_header ph;

for(int i = 0; i < NUM_RD; i ++){
myRd[i] = new RawData();
}

int count=0;
void * buff = NULL;
int readSize=0;
int ret = 0;
int framesRead;
int temp = 0; //use to count pcap frames, such that frame with large value
framesRead = 0;
FILE *fp = fopen(PCAP_FILE, "rw");

if (fp==NULL) {
fprintf(stderr, "Open file %s error.",PCAP_FILE);
ret = ERROR_FILE_OPEN_FAILED;
goto ERROR;
}

fread(&pfh, sizeof(pcap_file_header), 1, fp);

buff = (void *)malloc(MAX_ETH_FRAME);


while(true) { //check this out. how many frames are read
memset(buff,0,MAX_ETH_FRAME);
//read pcap header to get a packet
//get only a pcap head count .
readSize=fread(&ph, sizeof(pcap_header), 1, fp);
if (readSize<=0) {
break;
}
if (buff==NULL) {
fprintf(stderr, "malloc memory failed.\n");
ret = ERROR_MEM_ALLOC_FAILED;
goto ERROR;
}
//get a packet contents.
//read ph.capture_len bytes.
readSize=fread(buff,1,ph.capture_len, fp);
if (readSize != ph.capture_len) {
free(buff);
fprintf(stderr, "pcap file parse error.\n");
ret = ERROR_PCAP_PARSE_FAILED;
goto ERROR;
}

// if(myrd_index == MAX_NUM_RD_BUFF){ // myrd is a ring buffer with size of MAX_NUM_RD_BUFF=100
// myrd_index = 0;
// }

// read IMU
if(ph.capture_len == 140){
temp ++;
if(temp > 40200){
float* tmpdata = processIMUFrame(buff, ph.capture_len);
//将各坐标轴的陀螺仪数据存入rawdata中
myRd[myrd_index]->gyro_x = tmpdata[0];
myRd[myrd_index]->gyro_y = tmpdata[1];
myRd[myrd_index]->gyro_z = tmpdata[2];

myrd_index ++;
myframe_index++;
}

if(myframe_index == totalFrames){
break;
}

}
qDebug()<<"myRd[myrd_index]->gyro_x:"<<myRd[myrd_index]->gyro_x<<endl;

if (feof(fp) || readSize <=0 ) {
break;
}
}

ERROR:
//free
if (buff) {
free(buff);
buff=NULL;
}
if (fp) {
fclose(fp);
fp=NULL;
}


输出结果是这个:
myRd[myrd_index]->gyro_x: 4.05582e-08

myRd[myrd_index]->gyro_x: 4.05582e-08

myRd[myrd_index]->gyro_x: 4.05582e-08

myRd[myrd_index]->gyro_x: 4.05582e-08

myRd[myrd_index]->gyro_x: 4.05582e-08


不知道哪里问题

...全文
169 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
潇湘夜雨~ 2019-10-16
  • 打赏
  • 举报
回复
void pcap_reader::processPcapFile(){ printf("sizeof:int %lu,unsigned int %lu,char %lu,unsigned char %lu,short:%lu,unsigned short:%lu\n", sizeof(int),sizeof(unsigned int),sizeof(char),sizeof(unsigned char),sizeof(short),sizeof(unsigned short)); pcap_file_header pfh; pcap_header ph; for(int i = 0; i < NUM_RD; i ++){ myRd[i] = new RawData(); } int count=0; void * buff = NULL; int readSize=0; int ret = 0; int framesRead; int temp = 0; //use to count pcap frames, such that frame with large value framesRead = 0; FILE *fp = fopen(PCAP_FILE, "rw"); if (fp==NULL) { fprintf(stderr, "Open file %s error.",PCAP_FILE); ret = ERROR_FILE_OPEN_FAILED; goto ERROR; } fread(&pfh, sizeof(pcap_file_header), 1, fp); buff = (void *)malloc(MAX_ETH_FRAME); while(true) { //check this out. how many frames are read memset(buff,0,MAX_ETH_FRAME); //read pcap header to get a packet //get only a pcap head count . readSize=fread(&ph, sizeof(pcap_header), 1, fp); if (readSize<=0) { break; } if (buff==NULL) { fprintf(stderr, "malloc memory failed.\n"); ret = ERROR_MEM_ALLOC_FAILED; goto ERROR; } //get a packet contents. //read ph.capture_len bytes. readSize=fread(buff,1,ph.capture_len, fp); if (readSize != ph.capture_len) { free(buff); fprintf(stderr, "pcap file parse error.\n"); ret = ERROR_PCAP_PARSE_FAILED; goto ERROR; } // if(myrd_index == MAX_NUM_RD_BUFF){ // myrd is a ring buffer with size of MAX_NUM_RD_BUFF=100 // myrd_index = 0; // } // read IMU if(ph.capture_len == 140){ temp ++; if(temp > 40200){ float* tmpdata = processIMUFrame(buff, ph.capture_len); //将各坐标轴的陀螺仪数据存入rawdata中 myRd[myrd_index]->gyro_x = tmpdata[0]; myRd[myrd_index]->gyro_y = tmpdata[1]; myRd[myrd_index]->gyro_z = tmpdata[2]; myrd_index ++; myframe_index++; } if(myframe_index == totalFrames){ break; } } printf("开始\n"); printf(" myRd[myrd_index]->gyro_x = %f and myrd_index = %d\n", myRd[myrd_index]->gyro_x, myrd_index); printf(" myRd[myrd_index]->gyro_y = %f and index = %d\n", myRd[myrd_index]->gyro_y, myrd_index); if (feof(fp) || readSize <=0 ) { break; } } ERROR: //free if (buff) { free(buff); buff=NULL; } if (fp) { fclose(fp); fp=NULL; } } 最新结果是这样的 开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0 开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0 开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0 开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0 开始 myRd[myrd_index]->gyro_x = 0.000001 and myrd_index = 0 myRd[myrd_index]->gyro_y = 0.000000 and index = 0 index全是0
潇湘夜雨~ 2019-10-14
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师 的回复:
仅供参考:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
就是可能是数组越界嘛
潇湘夜雨~ 2019-10-14
  • 打赏
  • 举报
回复
引用 4 楼 kuangbao9 的回复:
引用 2 楼 天上白玉京~ 的回复:
[quote=引用 1 楼 kuangbao9 的回复:] myrd_index你打印下这个值,有木有越界咧?
打印了,index一直是0
float* tmpdata = processIMUFrame(buff, ph.capture_len);这个有值吗?[/quote]有的,会返回三个float
kuangbao9 2019-10-14
  • 打赏
  • 举报
回复
引用 2 楼 天上白玉京~ 的回复:
引用 1 楼 kuangbao9 的回复:
myrd_index你打印下这个值,有木有越界咧?
打印了,index一直是0
float* tmpdata = processIMUFrame(buff, ph.capture_len);这个有值吗?
赵4老师 2019-10-14
  • 打赏
  • 举报
回复
仅供参考:
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
    int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]

    srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
    while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
        b[(a=rand()%11)]=0;
        Sleep(100);
        b[(a=rand()%11)]=1;
        Sleep(100);
        b[(a=rand()%11)]=2;
        Sleep(100);
        b[(a=rand()%11)]=3;
        Sleep(100);
        b[(a=rand()%11)]=4;
        Sleep(100);
    }
    return 0;
}
潇湘夜雨~ 2019-10-14
  • 打赏
  • 举报
回复
引用 1 楼 kuangbao9 的回复:
myrd_index你打印下这个值,有木有越界咧?
打印了,index一直是0
kuangbao9 2019-10-14
  • 打赏
  • 举报
回复
myrd_index你打印下这个值,有木有越界咧?

64,666

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧