提交代碼包含初始化、插入、刪除、查找、輸出等操作,但存在多處關鍵錯誤導致編譯失敗與邏輯漏洞。
// 錯誤
#include
// 正確
#include
#include
// 錯誤:ilength 非法標識符
for (i=0; i<length; i++)
// 正確:應使用結構體成員
for (i=0; i<L->length; i++)
// 錯誤:指針相減得元素個數,但未分配內存
L->length = &L->data[20] - &L->data[0] + 1; // 恒為21
// 正確:初始長度為0
L->length = 0;
// 錯誤:循環條件與移動方向相反
for (j=L->length-1; j>=i-1; j--) // 應從後向前移動
L->data[j+1] = L->data[j];
// 錯誤:返回ElemType* 但實際返回局部指針
ElemType* delete(sqlist* L, int i, ElemType* e)
// 正確:返回狀態碼,用輸出參數帶回數據
int delete(sqlist* L, int i, ElemType* e) {
if (i < 1 || i > L->length) return 0;
*e = L->data[i-1];
for (int j=i; jlength; j++)
L->data[j-1] = L->data[j];
L->length--;
return 1;
}
#include
#include
#define MAXSIZE 20
typedef int ElemType;
typedef struct {
ElemType data[MAXSIZE];
int length;
} SqlList;
// 初始化
void InitList(SqlList *L) { L->length = 0; }
// 插入
int ListInsert(SqlList *L, int i, ElemType e) {
if (i < 1 || i > L->length + 1) return 0;
if (L->length >= MAXSIZE) return 0;
for (int j = L->length; j >= i; j--)
L->data[j] = L->data[j-1];
L->data[i-1] = e;
L->length++;
return 1;
}
// 刪除
int ListDelete(SqlList *L, int i, ElemType *e) {
if (i < 1 || i > L->length) return 0;
*e = L->data[i-1];
for (int j = i; j < L->length; j++)
L->data[j-1] = L->data[j];
L->length--;
return 1;
}
-Wall -Wextra)與調試器單步跟蹤