or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
2018q3 第 2 週測驗題
目的: 檢驗學員對 C 語言程式設計 的認知
測驗
1
考慮到以下程式碼:
指出存在的問題和提出修正機制,需要用 C99/C11 規格解釋。
C99/C11 6.2.4
object referred out of lifetime is undefined behavior
延伸問題: 在 Common Vulnerabilities and Exposure (CVE) 找出類似上述不當的 string literal 操作,而導致的安全漏洞,並加以探討
測驗
2
指標篇 提到 signal 系統呼叫的原型宣告:
該如何解析呢?
提示: 參閱 manpage: signal(2)
延伸問題: 解釋 signal(2) 的作用,並在 GitHub 找出應用案例
測驗
3
Linux 核心程式碼 include/linux/list.h 提到以下程式碼,為何每個
head
使用時都要先加上()
呢?延伸問題: 在 Linux 核心原始程式碼找出類似上述「走訪節點」的片段,討論其實作技巧和考量點
測驗
4
考慮到以下程式碼:
該如何修改,才能讓
func
得以變更到main
裡頭ptrA
的內含值?延伸問題: 在 GitHub 找出使用 the pointer to the pointer 的 C 語言程式碼,並加以討論
測驗
5
以下程式是合法 C99 程式嗎?
請搭配 C 語言規格書解釋
繼續思考以下是否合法:
繼續變形:
也會合法嗎?為什麼?請翻閱 C 語言規格書解說。
測驗
6
考慮以下程式碼:
如果要 free() 時,是否需要兩層的迴圈呢?倘若有人只是 free(arr); 會發生什麼事?又,該如何改善?
延伸問題: 藉由 AddressSanitizer 一類的記憶體分析工具,探討上述程式碼在執行時期的行為,並且比較你引入的改善是否有效益
測驗
7
推敲以下程式碼的作用:
延伸問題: 在 glibc 原始程式碼找出類似作用和寫法的程式碼,並探討其實作技巧
測驗
8
以下程式碼改寫自 Linux 核心原始程式碼,請對照註解 (預期功能),指出實作上的問題,假設輸入
value
不會超過 32-bit。延伸問題: