if(index >= MAX_RECORDS){ if(strncmp(mode_str,"WRC_SLAVE_WR1",strlen("WRC_SLAVE_WR1")) == 0){ free(Wr1_loopb[0]); free(Wr1_onew[0]); free(Wr1_linkt[0]); memmove(Wr1_loopb,Wr1_loopb + 1,(MAX_RECORDS -1)*sizeof(char *)); memmove(Wr1_onew,Wr1_onew + 1,(MAX_RECORDS -1)*sizeof(char *)); memmove(Wr1_linkt,Wr1_linkt + 1,(MAX_RECORDS -1)*sizeof(char *)); index--; }else if(strncmp(mode_str, "WRC_SLAVE_WR0",strlen("WRC_SLAVE_WR0")) == 0){ free(Wr0_loopb[0]); free(Wr0_onew[0]); free(Wr0_linkt[0]); memmove(Wr0_loopb,Wr0_loopb + 1,(MAX_RECORDS -1)*sizeof(char *)); memmove(Wr0_onew,Wr0_onew + 1,(MAX_RECORDS -1)*sizeof(char *)); memmove(Wr0_linkt,Wr0_linkt + 1,(MAX_RECORDS -1)*sizeof(char *)); index--; }else{ printf("Unknown WR mode: %s\n",mode_str); exit(1); } } 出现段错误
时间: 2024-02-14 21:35:22 浏览: 92
nl_strncmp.rar_The Chain
出现段错误的原因可能是因为数组越界或者内存访问错误。在这段代码中,可能是因为以下原因导致段错误:
1. 没有判断 Wr1_loopb、Wr1_onew、Wr1_linkt 或 Wr0_loopb、Wr0_onew、Wr0_linkt 是否为空指针或者数组大小是否足够,如果不足够就会出现数组越界的问题;
2. 在 free() 释放内存之后,没有将指针设置为 NULL,导致指针成为了“野指针”,继续使用就会出现内存访问错误。
3. 在 memmove() 函数中,可能存在拷贝越界的问题,导致内存访问错误。
您可以使用调试器(如 gdb)来定位问题所在的具体位置,并找出造成段错误的原因。
阅读全文