C语言二维数组如何按行优先规则在最小空闲索引处追加元素
现有代码存在的问题
- 未在找到第一个空位置后终止遍历:当前逻辑会把数组中所有值为0的位置都覆盖为传入的
val,不符合仅追加单个元素的需求 - 未使用传入的
expand_row参数:没有实现数组满时的扩容逻辑,无法处理二维数组所有位置都已被占用的场景 - 缺少返回值:函数声明的返回值类型为
imgr_result_t,但代码中没有任何return语句,会触发编译错误 - 未做空指针校验:没有校验传入的
im指针是否合法,访问空指针会直接导致程序崩溃
修正后的实现代码
imgr_result_t imgr_append(imgr_t* im, int expand_row, int val) { // 参数合法性校验 if (im == NULL || im->pixels == NULL) { return IMGR_ERR_INVALID_PARAM; // 替换为项目中实际定义的参数错误码 } // 按行优先、列从小到大规则查找第一个空位 for(int i = 0; i < im->rows; i++) { for(int j = 0; j < im->cols; j++) { if(im->pixels[i][j] == 0) { im->pixels[i][j] = val; return IMGR_SUCCESS; // 写入完成直接返回,终止后续遍历 } } } // 数组已满时处理扩容逻辑 if (expand_row) { // 此处补充实际扩容逻辑:为新行分配内存、更新im->rows计数 // 写入新行的第一个位置 im->pixels[im->rows - 1][0] = val; return IMGR_SUCCESS; } // 无需扩容时返回数组已满错误 return IMGR_ERR_FULL; }
内容的提问来源于stack exchange,提问作者sims009
相关产品推荐
相关产品推荐

