{"id":442,"date":"2025-03-23T02:51:54","date_gmt":"2025-03-23T02:51:54","guid":{"rendered":"https:\/\/news.techjunior.vn\/?p=442"},"modified":"2025-03-23T02:51:54","modified_gmt":"2025-03-23T02:51:54","slug":"%f0%9f%9a%80-quan-ly-bo-nho-trong-c-hieu-ro-de-viet-code-hieu-qua-%f0%9f%92%bb","status":"publish","type":"post","link":"https:\/\/news.techjunior.vn\/?p=442","title":{"rendered":"\ud83d\ude80 QU\u1ea2N L\u00dd B\u1ed8 NH\u1eda TRONG C \u2013 HI\u1ec2U R\u00d5 \u0110\u1ec2 VI\u1ebeT CODE HI\u1ec6U QU\u1ea2 \ud83d\udcbb"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"521\" src=\"https:\/\/news.techjunior.vn\/wp-content\/uploads\/2025\/03\/C-Memory-Management.png\" alt=\"\" class=\"wp-image-443\" srcset=\"https:\/\/news.techjunior.vn\/wp-content\/uploads\/2025\/03\/C-Memory-Management.png 996w, https:\/\/news.techjunior.vn\/wp-content\/uploads\/2025\/03\/C-Memory-Management-300x157.png 300w, https:\/\/news.techjunior.vn\/wp-content\/uploads\/2025\/03\/C-Memory-Management-768x402.png 768w, https:\/\/news.techjunior.vn\/wp-content\/uploads\/2025\/03\/C-Memory-Management-850x445.png 850w\" sizes=\"auto, (max-width: 996px) 100vw, 996px\" \/><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udccc <strong>Gi\u1edbi thi\u1ec7u<\/strong><\/h2>\n\n\n\n<p>Ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh C cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean <strong>qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb m\u1ed9t c\u00e1ch linh ho\u1ea1t<\/strong>, nh\u01b0ng c\u0169ng \u0111i k\u00e8m v\u1edbi <strong>r\u1ee7i ro n\u1ebfu kh\u00f4ng qu\u1ea3n l\u00fd t\u1ed1t<\/strong>. N\u1ebfu b\u1ea1n t\u1eebng g\u1eb7p l\u1ed7i <strong>memory leak, segmentation fault, ho\u1eb7c buffer overflow<\/strong>, th\u00ec \u0111\u00e2y ch\u00ednh l\u00e0 b\u00e0i vi\u1ebft gi\u00fap b\u1ea1n hi\u1ec3u r\u00f5 <strong>c\u00e1ch qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb hi\u1ec7u qu\u1ea3 trong C<\/strong>.<\/p>\n\n\n\n<p>\ud83d\udca1 <strong>N\u1ed9i dung b\u00e0i vi\u1ebft n\u00e0y:<\/strong><br>\u2705 C\u1ea5u tr\u00fac b\u1ed9 nh\u1edb c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh C<br>\u2705 C\u00e1ch c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb t\u0129nh v\u00e0 \u0111\u1ed9ng<br>\u2705 H\u00e0m malloc(), calloc(), realloc() v\u00e0 free()<br>\u2705 C\u00e1c l\u1ed7i ph\u1ed5 bi\u1ebfn khi qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb<br>\u2705 K\u1ef9 thu\u1eadt t\u1ed1i \u01b0u v\u00e0 c\u00f4ng c\u1ee5 ki\u1ec3m tra b\u1ed9 nh\u1edb<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udccc <strong>1. C\u1ea5u Tr\u00fac B\u1ed9 Nh\u1edb C\u1ee7a Ch\u01b0\u01a1ng Tr\u00ecnh C<\/strong><\/h2>\n\n\n\n<p>Trong C, b\u1ed9 nh\u1edb c\u1ee7a m\u1ed9t ch\u01b0\u01a1ng tr\u00ecnh <strong>\u0111\u01b0\u1ee3c chia th\u00e0nh c\u00e1c v\u00f9ng ch\u00ednh sau:<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>1.1. V\u00f9ng Text (Code Segment)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ee9a <strong>m\u00e3 m\u00e1y c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh<\/strong> (c\u00e1c l\u1ec7nh th\u1ef1c thi).<\/li>\n\n\n\n<li>Th\u01b0\u1eddng <strong>ch\u1ec9 \u0111\u1ecdc (read-only)<\/strong> \u0111\u1ec3 tr\u00e1nh ghi \u0111\u00e8 ng\u1eabu nhi\u00ean.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>1.2. V\u00f9ng Data Segment<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ee9a c\u00e1c <strong>bi\u1ebfn to\u00e0n c\u1ee5c (global)<\/strong> v\u00e0 <strong>bi\u1ebfn t\u0129nh (static)<\/strong>.<\/li>\n\n\n\n<li>Chia l\u00e0m hai ph\u1ea7n:\n<ul class=\"wp-block-list\">\n<li><strong>.data<\/strong> \u2013 ch\u1ee9a bi\u1ebfn to\u00e0n c\u1ee5c kh\u1edfi t\u1ea1o gi\u00e1 tr\u1ecb.<\/li>\n\n\n\n<li><strong>.bss<\/strong> \u2013 ch\u1ee9a bi\u1ebfn to\u00e0n c\u1ee5c ch\u01b0a kh\u1edfi t\u1ea1o.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>1.3. V\u00f9ng Stack \u2013 D\u00f9ng Cho Bi\u1ebfn C\u1ee5c B\u1ed9 &amp; L\u1eddi G\u1ecdi H\u00e0m<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ch\u1ee9a <strong>bi\u1ebfn c\u1ee5c b\u1ed9<\/strong> v\u00e0 <strong>con tr\u1ecf tr\u1ea3 v\u1ec1 t\u1eeb h\u00e0m<\/strong>.<\/li>\n\n\n\n<li>LIFO (Last In, First Out).<\/li>\n\n\n\n<li>D\u1ec5 b\u1ecb l\u1ed7i <strong>stack overflow<\/strong> n\u1ebfu d\u00f9ng qu\u00e1 nhi\u1ec1u b\u1ed9 nh\u1edb.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd39 <strong>1.4. V\u00f9ng Heap \u2013 D\u00f9ng Cho C\u1ea5p Ph\u00e1t \u0110\u1ed9ng<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>D\u00f9ng \u0111\u1ec3 c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb \u0111\u1ed9ng b\u1eb1ng <code>malloc()<\/code>, <code>calloc()<\/code>, <code>realloc()<\/code>.<\/li>\n\n\n\n<li>C\u1ea7n gi\u1ea3i ph\u00f3ng th\u1ee7 c\u00f4ng b\u1eb1ng <code>free()<\/code> \u0111\u1ec3 tr\u00e1nh <strong>memory leak<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udccc <strong>T\u00f3m t\u1eaft c\u1ea5u tr\u00fac b\u1ed9 nh\u1edb:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>V\u00f9ng b\u1ed9 nh\u1edb<\/th><th>N\u1ed9i dung<\/th><\/tr><\/thead><tbody><tr><td>Code<\/td><td>Ch\u1ee9a m\u00e3 m\u00e1y c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh<\/td><\/tr><tr><td>Data<\/td><td>Ch\u1ee9a bi\u1ebfn to\u00e0n c\u1ee5c &amp; static<\/td><\/tr><tr><td>Stack<\/td><td>Bi\u1ebfn c\u1ee5c b\u1ed9 &amp; l\u1eddi g\u1ecdi h\u00e0m<\/td><\/tr><tr><td>Heap<\/td><td>D\u00f9ng \u0111\u1ec3 c\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb \u0111\u1ed9ng<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udccc <strong>2. C\u00e1c V\u00ed D\u1ee5 C\u1ee5 Th\u1ec3<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>V\u00ed d\u1ee5 1: C\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb \u0111\u1ed9ng b\u1eb1ng malloc() v\u00e0 free()<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\nint main() {\n    int *ptr;\n    ptr = (int*) malloc(5 * sizeof(int)); \/\/ C\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb cho 5 s\u1ed1 nguy\u00ean\n    if (ptr == NULL) {\n        printf(\"C\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb th\u1ea5t b\u1ea1i!\\n\");\n        return 1;\n    }\n    for (int i = 0; i &lt; 5; i++) {\n        ptr&#091;i] = i * 2;\n        printf(\"%d \", ptr&#091;i]);\n    }\n    free(ptr); \/\/ Gi\u1ea3i ph\u00f3ng b\u1ed9 nh\u1edb sau khi s\u1eed d\u1ee5ng\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udccc <strong>Gi\u1ea3i th\u00edch:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>malloc()<\/code> c\u1ea5p ph\u00e1t v\u00f9ng nh\u1edb \u0111\u1ee7 \u0111\u1ec3 ch\u1ee9a 5 s\u1ed1 nguy\u00ean.<\/li>\n\n\n\n<li>Ki\u1ec3m tra n\u1ebfu <code>malloc()<\/code> tr\u1ea3 v\u1ec1 <code>NULL<\/code> th\u00ec c\u1ea5p ph\u00e1t th\u1ea5t b\u1ea1i.<\/li>\n\n\n\n<li>Sau khi s\u1eed d\u1ee5ng, ph\u1ea3i d\u00f9ng <code>free()<\/code> \u0111\u1ec3 tr\u00e1nh memory leak.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>V\u00ed d\u1ee5 2: C\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb b\u1eb1ng calloc()<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\nint main() {\n    int *ptr = (int*) calloc(5, sizeof(int));\n    if (ptr == NULL) {\n        printf(\"C\u1ea5p ph\u00e1t b\u1ed9 nh\u1edb th\u1ea5t b\u1ea1i!\\n\");\n        return 1;\n    }\n    for (int i = 0; i &lt; 5; i++) {\n        printf(\"%d \", ptr&#091;i]); \/\/ Gi\u00e1 tr\u1ecb m\u1eb7c \u0111\u1ecbnh l\u00e0 0\n    }\n    free(ptr);\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udccc <strong>S\u1ef1 kh\u00e1c bi\u1ec7t so v\u1edbi <code>malloc()<\/code>:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>calloc()<\/code> kh\u00f4ng ch\u1ec9 c\u1ea5p ph\u00e1t m\u00e0 c\u00f2n <strong>kh\u1edfi t\u1ea1o t\u1ea5t c\u1ea3 ph\u1ea7n t\u1eed v\u1ec1 0<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>V\u00ed d\u1ee5 3: S\u1eed d\u1ee5ng realloc() \u0111\u1ec3 thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc v\u00f9ng nh\u1edb<\/strong><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;stdlib.h&gt;\n\nint main() {\n    int *ptr = (int*) malloc(2 * sizeof(int));\n    ptr&#091;0] = 10; ptr&#091;1] = 20;\n    ptr = (int*) realloc(ptr, 4 * sizeof(int)); \/\/ M\u1edf r\u1ed9ng b\u1ed9 nh\u1edb\n    ptr&#091;2] = 30; ptr&#091;3] = 40;\n    for (int i = 0; i &lt; 4; i++) {\n        printf(\"%d \", ptr&#091;i]);\n    }\n    free(ptr);\n    return 0;\n}\n<\/code><\/pre>\n\n\n\n<p>\ud83d\udccc <strong>L\u01b0u \u00fd:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>realloc()<\/code> c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng ho\u1eb7c thu nh\u1ecf b\u1ed9 nh\u1edb \u0111\u00e3 c\u1ea5p ph\u00e1t tr\u01b0\u1edbc \u0111\u00f3.<\/li>\n\n\n\n<li>N\u1ebfu <code>realloc()<\/code> th\u1ea5t b\u1ea1i, n\u00f3 tr\u1ea3 v\u1ec1 <code>NULL<\/code>, c\u1ea7n ki\u1ec3m tra \u0111\u1ec3 tr\u00e1nh l\u1ed7i.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>M\u1ed9t s\u1ed1 l\u1ed7i ph\u1ed5 bi\u1ebfn v\u00e0 c\u00e1ch kh\u1eafc ph\u1ee5c<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>L\u1ed7i<\/th><th>Nguy\u00ean nh\u00e2n<\/th><th>C\u00e1ch kh\u1eafc ph\u1ee5c<\/th><\/tr><\/thead><tbody><tr><td>Memory Leak<\/td><td>Kh\u00f4ng d\u00f9ng <code>free()<\/code> sau khi <code>malloc()<\/code> ho\u1eb7c <code>calloc()<\/code><\/td><td>Lu\u00f4n gi\u1ea3i ph\u00f3ng b\u1ed9 nh\u1edb khi kh\u00f4ng d\u00f9ng n\u1eefa<\/td><\/tr><tr><td>Segmentation Fault<\/td><td>Truy xu\u1ea5t v\u00f9ng nh\u1edb kh\u00f4ng h\u1ee3p l\u1ec7<\/td><td>Ki\u1ec3m tra \u0111\u1ecba ch\u1ec9 con tr\u1ecf tr\u01b0\u1edbc khi s\u1eed d\u1ee5ng<\/td><\/tr><tr><td>Dangling Pointer<\/td><td>Gi\u1ea3i ph\u00f3ng b\u1ed9 nh\u1edb nh\u01b0ng v\u1eabn s\u1eed d\u1ee5ng con tr\u1ecf c\u0169<\/td><td>G\u00e1n con tr\u1ecf v\u1ec1 <code>NULL<\/code> sau khi <code>free()<\/code><\/td><\/tr><tr><td>Buffer Overflow<\/td><td>Ghi d\u1eef li\u1ec7u v\u01b0\u1ee3t qu\u00e1 k\u00edch th\u01b0\u1edbc m\u1ea3ng<\/td><td>Ki\u1ec3m tra ch\u1ec9 s\u1ed1 tr\u01b0\u1edbc khi truy c\u1eadp<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc <strong>C\u00f4ng c\u1ee5 ki\u1ec3m tra l\u1ed7i b\u1ed9 nh\u1edb<\/strong><\/h3>\n\n\n\n<p>\u2705 <strong>Valgrind<\/strong> \u2013 D\u00f9ng \u0111\u1ec3 ph\u00e1t hi\u1ec7n memory leak.<br>\u2705 <strong>AddressSanitizer (ASan)<\/strong> \u2013 H\u1eefu \u00edch \u0111\u1ec3 ph\u00e1t hi\u1ec7n l\u1ed7i truy c\u1eadp b\u1ed9 nh\u1edb.<br>\u2705 <strong>gdb (GNU Debugger)<\/strong> \u2013 Gi\u00fap debug l\u1ed7i li\u00ean quan \u0111\u1ebfn con tr\u1ecf v\u00e0 b\u1ed9 nh\u1edb.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83c\udfaf <strong>T\u00f3m T\u1eaft<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb hi\u1ec7u qu\u1ea3<\/strong> gi\u00fap tr\u00e1nh l\u1ed7i v\u00e0 t\u1ed1i \u01b0u hi\u1ec7u su\u1ea5t ch\u01b0\u01a1ng tr\u00ecnh.<\/li>\n\n\n\n<li>S\u1eed d\u1ee5ng \u0111\u00fang c\u00e1ch <code>malloc()<\/code>, <code>calloc()<\/code>, <code>realloc()<\/code> v\u00e0 <code>free()<\/code>.<\/li>\n\n\n\n<li>Tr\u00e1nh c\u00e1c l\u1ed7i ph\u1ed5 bi\u1ebfn nh\u01b0 memory leak, buffer overflow.<\/li>\n\n\n\n<li>D\u00f9ng c\u00e1c c\u00f4ng c\u1ee5 ki\u1ec3m tra \u0111\u1ec3 ph\u00e1t hi\u1ec7n l\u1ed7i s\u1edbm.<\/li>\n<\/ul>\n\n\n\n<p>\ud83d\udca1 <strong>N\u1eafm v\u1eefng ki\u1ebfn th\u1ee9c n\u00e0y s\u1ebd gi\u00fap b\u1ea1n vi\u1ebft code an to\u00e0n, hi\u1ec7u qu\u1ea3 v\u00e0 t\u1ed1i \u01b0u h\u01a1n trong C!<\/strong> \ud83d\ude80<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udccc Gi\u1edbi thi\u1ec7u Ng\u00f4n ng\u1eef l\u1eadp tr\u00ecnh C cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb m\u1ed9t c\u00e1ch linh ho\u1ea1t, nh\u01b0ng c\u0169ng \u0111i k\u00e8m v\u1edbi r\u1ee7i ro n\u1ebfu kh\u00f4ng qu\u1ea3n l\u00fd&#8230;<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-442","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/posts\/442","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=442"}],"version-history":[{"count":1,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/posts\/442\/revisions"}],"predecessor-version":[{"id":444,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=\/wp\/v2\/posts\/442\/revisions\/444"}],"wp:attachment":[{"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=442"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=442"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/news.techjunior.vn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}