LeetCode 常見模板:回傳 malloc 的陣列
舉例先前練過的題目1929:把陣列接兩次並回傳
#include <stdlib.h>
int* getConcatenation(int* nums, int numsSize, int* returnSize) {
// 設定回傳陣列大小
*returnSize = numsSize * 2;
// 使用 malloc 在 heap 分配陣列
int *ans = malloc((*returnSize) * sizeof *ans);
if (ans == NULL) return NULL; // 防呆:分配失敗
// 複製原陣列兩次
for (int i = 0; i < numsSize; i++) {
ans[i] = nums[i]; // 第一遍
ans[i + numsSize] = nums[i]; // 第二遍
}
return ans; // 回傳動態分配的陣列
}
程式碼詳解:
*returnSize = numsSize * 2;:告訴測試框架回傳陣列大小
malloc((*returnSize) * sizeof *ans):*ans 的型別是 int,sizeof *ans 就是 int 大小,
這種寫法比直接寫 sizeof(int) 更安全,型別改變不需修改 sizeof
if (ans == NULL):檢查 malloc 是否成功
兩個 for-loop 可以用一個 for-loop 完成,也可用指標操作,但用索引對初學者更直觀
回傳陣列由測試框架負責 free,或自行在 main 裡 free