首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言 strcat 動態擴容導致 free 失效:realloc 正確擴容模式

     編輯:程式設計綜合問答

錯誤代碼

char *pName = malloc(strlen("Yums") + 1);
strcpy(pName, "Yums");
strcat(pName, "Bob"); // 未擴容,緩衝區溢出,破壞堆元數據
free(pName); // free 失效/崩潰

原因

`strcat` **不會自動擴容**,直接寫入 `pName` 末尾之後的內存,破壞堆管理結構,導致後續 `free` 崩潰或靜默腐敗。

正確模式:手動 realloc

size_t len = strlen(pName);
size_t add = strlen("Bob");
char *tmp = realloc(pName, len + add + 1);
if (!tmp) { /* 處理 OOM */ }
pName = tmp;
strcat(pName, "Bob"); // 現在安全
// ...
free(pName);

封裝建議

寫 `char *strappend(char **dst, const char *src)` 內部處理 `realloc`,返回新指針或錯誤碼,業務代碼簡潔安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved