آموزش برنامهنویسی C برای مبتدیان
آموزش برنامهنویسی C برای مبتدیان
آموزش برنامهنویسی C برای مبتدیان
فهرست مطالب

- چرا برنامهنویسی C را یاد بگیریم؟
- ابزارهای مورد نیاز برای شروع برنامهنویسی C
- اولین برنامهی C شما: “Hello, World!”
- مفاهیم بنیادی در برنامهنویسی C
- ساختار کنترل جریان برنامه (Control Flow)
- آرایهها و رشتهها (Arrays and Strings)
- توابع (Functions)
- اشارهگرها (Pointers) در C: قدرت و ظرافت
- ساختارها و یونیونها (Structures and Unions)
- مدیریت فایل (File I/O)
- بهترین روشها و نکات کلیدی برای یادگیری C
- پرسشهای متداول (FAQ)
- اشتباهات رایج و راهحل سریع
خلاصه مقاله
- آموزش C یک گام اساسی برای درک عمیق کامپیوتر و شروع برنامهنویسی سیستم است.
- این راهنما شما را با ابزارهای لازم، نصب محیط توسعه، و اولین برنامهی C آشنا میکند.
- مفاهیم بنیادی نظیر متغیرها، عملگرها، کنترل جریان، آرایهها، توابع و اشارهگرها به تفصیل پوشش داده میشوند.
- نکات کاربردی، اشتباهات رایج و پاسخ به سوالات متداول به شما در یادگیری مؤثر C کمک خواهند کرد.
اگر در ابتدای مسیر برنامهنویسی هستید یا به دنبال درک عمیقتر از نحوهی کارکرد سیستمهای کامپیوتری میباشید، زبان برنامهنویسی C یک نقطه شروع ایدهآل و قدرتمند است. این مقاله به شما کمک میکند تا به عنوان یک مبتدی، گام به گام با مفاهیم اساسی C آشنا شوید، محیط توسعهی خود را راهاندازی کنید و با مثالهای کاربردی، مهارتهای لازم برای نوشتن برنامههای C را کسب کنید.
هدف ما ارائهی یک راهنمای جامع و کاربردی است که نه تنها اصول را توضیح دهد، بلکه با تمرکز بر چالشهای رایج دانشجویان و پژوهشگران، مسیر یادگیری شما را هموار سازد.
چرا برنامهنویسی C را یاد بگیریم؟

یادگیری زبان برنامهنویسی C برای مبتدیان اهمیت زیادی دارد زیرا این زبان به عنوان ستون فقرات بسیاری از سیستمعاملها، کامپایلرها و پایگاه دادهها عمل میکند. C به شما امکان میدهد با سختافزار در سطحی نزدیکتر تعامل داشته باشید و درک عمیقی از معماری کامپیوتر و مدیریت حافظه پیدا کنید.
C با کارایی بالا، انعطافپذیری فوقالعاده و قابلیت کنترل دقیق بر منابع سیستم، انتخاب اول در توسعه سیستمعاملها (مانند لینوکس و ویندوز)، سیستمهای توکار (Embedded Systems)، درایورهای دستگاه و حتی بازیهای کامپیوتری است. تسلط بر C، دروازهای برای یادگیری زبانهای سطح بالاتر مانند C++، Java و Python خواهد بود، زیرا مفاهیم بنیادینی که در C میآموزید، در اکثر زبانهای دیگر نیز کاربرد دارند.
ابزارهای مورد نیاز برای شروع برنامهنویسی C

برای شروع برنامهنویسی C، شما به دو ابزار اصلی نیاز دارید: یک ویرایشگر کد (Code Editor) برای نوشتن کدها و یک کامپایلر (Compiler) برای تبدیل کدهای C به فایل اجرایی قابل فهم برای کامپیوتر.
این ابزارها اغلب به صورت بستههای توسعه یکپارچه (IDE – Integrated Development Environment) ارائه میشوند که کار را برای برنامهنویسان مبتدی آسانتر میکنند.
نصب و راهاندازی محیط توسعه
راهاندازی محیط توسعه بسته به سیستمعامل شما ممکن است کمی متفاوت باشد، اما مراحل کلی مشابه هستند. در ادامه راهنمای گام به گام برای سیستمعاملهای رایج را مشاهده میکنید:
- انتخاب کامپایلر: متداولترین کامپایلر برای C، کامپایلر GCC (GNU Compiler Collection) است. این کامپایلر برای لینوکس، مک و ویندوز در دسترس است.
- نصب GCC:
- ویندوز: میتوانید MinGW-w64 را نصب کنید که شامل GCC برای ویندوز است. پس از نصب، مسیر bin آن را به متغیرهای محیطی (PATH) سیستم خود اضافه کنید.
- لینوکس (دبیان/اوبونتو): دستور
sudo apt update && sudo apt install build-essentialرا در ترمینال اجرا کنید. - مک: با نصب Xcode Command Line Tools (
xcode-select --install) GCC نیز نصب میشود.
- انتخاب و نصب IDE/ویرایشگر کد:
- VS Code: یک ویرایشگر کد سبک و قدرتمند با افزونههای فراوان (مانند C/C++ Extension Pack).
- Code::Blocks: یک IDE کامل و رایگان، مناسب برای مبتدیان با کامپایلر داخلی.
- CLion: یک IDE حرفهای و قدرتمند از JetBrains (نسخه دانشجویی رایگان دارد).
- تست نصب: یک فایل متنی با پسوند
.cبسازید و کد “Hello, World!” را در آن بنویسید (در بخش بعدی توضیح داده میشود). سپس از طریق خط فرمان (Terminal/CMD) به مسیری که فایل را ذخیره کردهاید بروید و دستورgcc your_program_name.c -o your_program_nameرا اجرا کنید. اگر خطا نداد، با./your_program_name(لینوکس/مک) یاyour_program_name.exe(ویندوز) آن را اجرا کنید.
اولین برنامهی C شما: “Hello, World!”
اولین برنامهی هر زبان برنامهنویسی، “Hello, World!” است که نحوهی کلی ساختار یک برنامه در آن زبان را به شما نشان میدهد. در C، این برنامه بسیار ساده و در عین حال آموزنده است.
این برنامه شامل یک کتابخانه استاندارد برای ورودی و خروجی است و از تابع اصلی `main` برای اجرای کد استفاده میکند تا پیغام “Hello, World!” را روی صفحه چاپ کند.
#include <stdio.h> // شامل کردن کتابخانه ورودی/خروجی استاندارد
int main() {
printf("Hello, World!n"); // چاپ رشته "Hello, World!" به همراه یک خط جدید
return 0; // نشانگر اجرای موفقیتآمیز برنامه
}
#include <stdio.h>: این خط یک پیشپردازنده (preprocessor directive) است که به کامپایلر میگوید محتویات فایل هدرstdio.h(Standard Input/Output Header) را در این فایل قرار دهد. این فایل شامل توابعی مانندprintf()برای چاپ خروجی است.int main(): این بخش تابع اصلی برنامه است. هر برنامهی C باید یک تابعmainداشته باشد. اجرای برنامه از این تابع آغاز میشود.intنشان میدهد که تابع یک مقدار عدد صحیح را برمیگرداند.printf("Hello, World!n");: تابعprintf()برای نمایش خروجی روی صفحه کنسول استفاده میشود.nیک کاراکتر خط جدید است که باعث میشود پس از چاپ متن، مکاننما به ابتدای خط بعدی منتقل شود.return 0;: این خط نشان میدهد که برنامه با موفقیت اجرا شده و به سیستمعامل برمیگردد. مقدار 0 به صورت قراردادی نشاندهندهی اجرای موفق است.
مفاهیم بنیادی در برنامهنویسی C
درک این مفاهیم بنیادی برای پیشرفت در برنامهنویسی C حیاتی است. این بخش به شما کمک میکند تا بلوکهای اصلی ساختمان هر برنامه C را بشناسید.
متغیرها و انواع داده
متغیرها فضاهایی در حافظه هستند که برای ذخیرهی دادهها استفاده میشوند. هر متغیر باید یک نوع داده (Data Type) داشته باشد که نوع اطلاعاتی که میتواند ذخیره کند (مانند عدد صحیح، عدد اعشاری، کاراکتر) را مشخص میکند و میزان فضای حافظه مورد نیاز برای آن را تعیین میکند.
اعلان متغیر شامل تعیین نوع داده و نام متغیر است؛ به عنوان مثال، `int age;` یک متغیر با نام `age` از نوع عدد صحیح تعریف میکند که تنها اعداد کامل را در خود جای میدهد.
| نوع داده (Data Type) | توضیحات |
|---|---|
int |
اعداد صحیح (مانند 10، -5) |
float |
اعداد اعشاری با دقت تک (مانند 3.14) |
double |
اعداد اعشاری با دقت دوگانه (دقت بیشتر از float) |
char |
یک کاراکتر تکی (مانند ‘A’, ‘b’, ‘7’) |
void |
نوع خالی، معمولاً برای توابعی که مقداری برنمیگردانند یا اشارهگرهای عمومی |
مثال:
int age = 25;
float salary = 50000.50f;
char initial = 'J';
عملگرها (Operators)
عملگرها نمادهایی هستند که برای انجام عملیات روی متغیرها و مقادیر استفاده میشوند. C طیف وسیعی از عملگرها را پشتیبانی میکند:
- عملگرهای محاسباتی (Arithmetic):
+(جمع),-(تفریق),*(ضرب),/(تقسیم),%(باقیمانده تقسیم). - عملگرهای رابطهای (Relational):
==(مساوی),!=(نامساوی),>(بزرگتر),<(کوچکتر),>=(بزرگتر یا مساوی),<=(کوچکتر یا مساوی). - عملگرهای منطقی (Logical):
&&(AND منطقی),||(OR منطقی),!(NOT منطقی). - عملگرهای انتسابی (Assignment):
=(اختصاص),+=,-=,*=,/=,%=. - عملگرهای افزایشی/کاهشی (Increment/Decrement):
++(افزایش یک واحد),--(کاهش یک واحد).
ورودی و خروجی (Input/Output)
تعامل با کاربر از طریق توابع ورودی و خروجی انجام میشود. مهمترین توابع در <stdio.h> عبارتند از printf() برای چاپ خروجی و scanf() برای خواندن ورودی از کاربر.
مثال:
#include <stdio.h>
int main() {
int num;
printf("یک عدد وارد کنید: ");
scanf("%d", &num); // %d برای خواندن عدد صحیح، & برای آدرس متغیر
printf("عدد وارد شده: %dn", num);
return 0;
}
دقت کنید که برای خواندن ورودی با scanf()، باید از عملگر & قبل از نام متغیر استفاده کنید تا آدرس حافظه متغیر به تابع داده شود.
ساختار کنترل جریان برنامه (Control Flow)
ساختارهای کنترل جریان به شما اجازه میدهند تا نحوهی اجرای کد را بر اساس شرایط مختلف یا تکرار یک بلوک کد، مدیریت کنید.
شرطیها (Conditional Statements)
دستورات شرطی به برنامه اجازه میدهند تا بر اساس درست یا غلط بودن یک شرط، مسیرهای اجرایی متفاوتی را انتخاب کند. مهمترین آنها if-else و switch هستند.
if-else:
int score = 85;
if (score >= 70) {
printf("قبول شدید!n");
} else {
printf("مردود شدید.n");
}
switch: برای مدیریت چندین گزینهی ممکن بر اساس مقدار یک متغیر مفید است.
char grade = 'B';
switch (grade) {
case 'A':
printf("عالی!");
break;
case 'B':
case 'C':
printf("خوب");
break;
default:
printf("نیاز به تلاش بیشتر");
}
حلقهها (Loops)
حلقهها برای تکرار یک بلوک کد تا زمانی که یک شرط خاص برآورده شود، استفاده میشوند. C سه نوع حلقه اصلی دارد: for، while و do-while.
- for: معمولاً زمانی استفاده میشود که تعداد تکرارها از قبل مشخص باشد.
- while: تا زمانی که شرط True باشد، تکرار میشود. ممکن است هیچگاه اجرا نشود اگر شرط از ابتدا False باشد.
- do-while: حداقل یک بار اجرا میشود و سپس شرط را بررسی میکند.
مثال حلقه for:
for (int i = 0; i < 5; i++) {
printf("تکرار %dn", i);
}
آرایهها و رشتهها (Arrays and Strings)
آرایهها به شما اجازه میدهند مجموعهای از مقادیر از یک نوع داده را در یک متغیر واحد ذخیره کنید. رشتهها در C به صورت آرایههایی از کاراکترها (با پایاندهندهی null) پیادهسازی میشوند.
آرایهها
یک آرایه یک مجموعه از عناصر همنوع است که در خانههای حافظه متوالی ذخیره میشوند و با یک نام واحد قابل دسترسی هستند. هر عنصر آرایه دارای یک شاخص (index) است که از 0 شروع میشود.
مثال اعلان و دسترسی به آرایه:
int numbers[5] = {10, 20, 30, 40, 50}; // اعلان و مقداردهی اولیه آرایه
printf("اولین عنصر: %dn", numbers[0]);
numbers[2] = 35; // تغییر مقدار عنصر سوم (شاخص 2)
رشتهها
در C، یک رشته یک آرایه از کاراکترها است که با کاراکتر null () خاتمه مییابد. این کاراکتر به توابع C نشان میدهد که رشته در کجا به پایان میرسد.
مثال:
#include <stdio.h>
#include <string.h> // برای توابع کار با رشته
int main() {
char greeting[] = "سلام";
char name[20];
strcpy(name, "علیرضا"); // کپی رشته "علیرضا" به name
printf("%s، %s!n", greeting, name);
printf("طول رشته نام: %zun", strlen(name)); // محاسبه طول رشته
return 0;
}
برای کار با رشتهها، توابع مختلفی در کتابخانهی string.h وجود دارد، از جمله strlen() برای محاسبهی طول، strcpy() برای کپی کردن، strcat() برای چسباندن و strcmp() برای مقایسهی رشتهها. یادگیری توابع رشتهای برای هر برنامهنویس C ضروری است.
توابع (Functions)
توابع بلوکهایی از کد هستند که برای انجام یک کار خاص طراحی شدهاند. استفاده از توابع باعث میشود کد شما سازمانیافتهتر، قابل استفادهی مجدد و خواناتر شود. هر تابع دارای یک نام، لیستی از پارامترها (ورودیها) و یک نوع بازگشتی (خروجی) است.
یک تابع در C میتواند مقداری را برگرداند یا هیچ مقداری را برنگرداند (که در این صورت نوع بازگشتی آن `void` خواهد بود). توابع برای تقسیمبندی منطق برنامه و جلوگیری از تکرار کد، بسیار کارآمد هستند.
مثال تابع:
#include <stdio.h>
int add(int a, int b) { // اعلان و تعریف تابع add
return a + b;
}
int main() {
int result = add(5, 3); // فراخوانی تابع add
printf("حاصل جمع: %dn", result);
return 0;
}
اشارهگرها (Pointers) در C: قدرت و ظرافت
اشارهگرها یکی از قدرتمندترین و در عین حال پیچیدهترین مفاهیم در C هستند. یک اشارهگر یک متغیر است که به جای نگهداری یک مقدار، آدرس حافظهی یک متغیر دیگر را نگهداری میکند.
با استفاده از اشارهگرها، میتوانید به صورت مستقیم با حافظهی کامپیوتر کار کنید، آرایهها و ساختارهای داده پیچیده را پیادهسازی کنید و بهینه سازیهای عملکردی را در برنامه اعمال کنید. درک اشارهگرها برای تسلط بر C ضروری است.
اعلان و استفاده از اشارهگر:
#include <stdio.h>
int main() {
int value = 100;
int *ptr; // اعلان یک اشارهگر به عدد صحیح
ptr = &value; // انتساب آدرس value به ptr (عملگر آدرسدهی &)
printf("مقدار value: %dn", value);
printf("آدرس value: %pn", &value);
printf("مقدار ذخیره شده در ptr (آدرس value): %pn", ptr);
printf("مقدار در آدرسی که ptr به آن اشاره میکند: %dn", *ptr); // عملگر dereference (*)
*ptr = 200; // تغییر مقدار value از طریق اشارهگر
printf("مقدار جدید value: %dn", value);
return 0;
}
برای مدیریت حافظه به صورت پویا (dynamic memory allocation)، توابعی مانند malloc()، calloc()، realloc() و free() در کتابخانهی stdlib.h وجود دارند که به شما امکان میدهند حافظه را در زمان اجرای برنامه رزرو و آزاد کنید. این برای ساختارهای دادهای که اندازهی آنها از قبل مشخص نیست، بسیار مهم است.
ساختارها و یونیونها (Structures and Unions)
ساختارها (Structs) و یونیونها (Unions) انواع دادهای تعریف شده توسط کاربر هستند که به شما اجازه میدهند تا مجموعهای از مقادیر با انواع دادههای مختلف را در یک واحد منطقی واحد گروهبندی کنید.
یک `struct` مجموعهای از متغیرها (اعضا) با انواع دادههای مختلف است که هر کدام فضای حافظهی جداگانهای دارند. در مقابل، یک `union` نیز مجموعهای از متغیرها است، اما تمامی اعضای آن فضای حافظه یکسانی را به اشتراک میگذارند و در هر لحظه فقط یکی از آنها میتواند مقدار داشته باشد.
مثال ساختار:
#include <stdio.h>
#include <string.h>
struct Person {
char name[50];
int age;
float height;
};
int main() {
struct Person p1;
strcpy(p1.name, "احمد");
p1.age = 30;
p1.height 1.75f;
printf("نام: %s، سن: %d، قد: %.2fn", p1.name, p1.age, p1.height);
return 0;
}
مدیریت فایل (File I/O)
مدیریت فایل به برنامه اجازه میدهد تا با فایلهای ذخیره شده روی دیسک سخت تعامل داشته باشد؛ یعنی اطلاعات را از فایلها بخواند یا اطلاعات را در آنها بنویسد. این قابلیت برای ذخیرهسازی دائمی دادهها حیاتی است.
برای کار با فایلها در C، از توابع کتابخانهای مانند fopen() برای باز کردن فایل، fclose() برای بستن فایل، fprintf() برای نوشتن در فایل و fscanf() برای خواندن از فایل استفاده میشود.
مثال:
#include <stdio.h>
int main() {
FILE *filePointer;
char data[100];
// نوشتن در فایل
filePointer = fopen("example.txt", "w"); // باز کردن فایل در حالت نوشتن (اگر وجود نداشته باشد، ایجاد میکند)
if (filePointer == NULL) {
printf("خطا در باز کردن فایل برای نوشتن!n");
return 1;
}
fprintf(filePointer, "این یک متن نمونه است.n");
fclose(filePointer);
printf("اطلاعات در فایل نوشته شد.n");
// خواندن از فایل
filePointer = fopen("example.txt", "r"); // باز کردن فایل در حالت خواندن
if (filePointer == NULL) {
printf("خطا در باز کردن فایل برای خواندن!n");
return 1;
}
fgets(data, 100, filePointer); // خواندن یک خط از فایل
printf("اطلاعات خوانده شده از فایل: %s", data);
fclose(filePointer);
return 0;
}
همیشه پس از اتمام کار با فایل، آن را با fclose() ببندید تا از هدر رفتن دادهها و مشکلات مربوط به منابع سیستم جلوگیری شود.
بهترین روشها و نکات کلیدی برای یادگیری C
برای تسریع و عمیقتر شدن فرآیند یادگیری C، به نکات زیر توجه کنید:
- تمرین منظم: برنامهنویسی یک مهارت عملی است. هرچه بیشتر کد بنویسید، اشکالزدایی کنید و برنامههای کوچک طراحی کنید، بهتر خواهید شد.
- کد دیگران را بخوانید: مطالعه کدهای منبع پروژههای کوچک یا مثالهای کتابخانهای میتواند دیدگاههای جدیدی به شما بدهد.
- مفاهیم حافظه را درک کنید: C به شما کنترل مستقیم بر حافظه میدهد. وقت بگذارید و نحوهی کار اشارهگرها، تخصیص حافظه و مدیریت آن را به خوبی درک کنید.
- از Debugger استفاده کنید: یک debugger (اشکالزدا) ابزاری ضروری برای فهمیدن نحوهی اجرای کد و یافتن خطاها است.
- سوال بپرسید و به جامعه بپیوندید: انجمنهای برنامهنویسی و گروههای آنلاین مکانهای عالی برای پرسیدن سوال و یادگیری از تجربیات دیگران هستند. عضویت در یک انجمن فعال به شما کمک شایانی میکند.
- کدهای خود را مستندسازی (Comment) کنید: برای خودتان و دیگران، کدهایتان را با توضیحات مناسب مستند کنید.
پرسشهای متداول (FAQ)
آیا زبان برنامهنویسی C هنوز مرتبط است؟
بله، C همچنان یکی از زبانهای برنامهنویسی بسیار مرتبط و پرکاربرد است، به خصوص در توسعهی سیستمعاملها، سیستمهای توکار، درایورهای سختافزار، توسعهی بازی و برنامههای با کارایی بالا.
چقدر طول میکشد تا C را یاد بگیرم؟
یادگیری اصول اولیه C ممکن است چند هفته تا چند ماه طول بکشد. تسلط واقعی بر C، به خصوص در مفاهیم پیشرفته مانند مدیریت حافظه و ساختارهای داده، نیاز به تمرین مداوم و سالها تجربه دارد.
تفاوت اصلی C و C++ چیست؟
C++ یک سوپرست از C است، به این معنی که تمام ویژگیهای C را شامل میشود و قابلیتهای برنامهنویسی شیگرا (Object-Oriented Programming – OOP) مانند کلاسها، وراثت و چندریختی را به آن اضافه میکند. C بیشتر یک زبان رویهای است.
آیا برای یادگیری C باید ریاضیات قوی داشته باشم؟
برای شروع برنامهنویسی C نیازی به ریاضیات پیشرفته ندارید؛ اما درک مفاهیم منطق، جبر بولی و حل مسئله به شما کمک زیادی خواهد کرد. برای برخی کاربردهای خاص C (مانند گرافیک یا شبیهسازی) دانش ریاضیات بالاتر مفید خواهد بود.
بعد از C چه زبانی را یاد بگیرم؟
پس از C، میتوانید به سراغ C++ (برای برنامهنویسی شیگرا و سیستمی)، پایتون (برای توسعهی وب، علم داده و یادگیری ماشین) یا جاوا (برای برنامههای سازمانی و اندروید) بروید. انتخاب زبان بعدی به علاقه و حوزهی کاری شما بستگی دارد.
اشتباهات رایج و راهحل سریع
در طول مسیر یادگیری C، احتمالاً با برخی اشتباهات رایج روبرو خواهید شد. در اینجا به تعدادی از آنها و راهحلهایشان اشاره میکنیم:
اشتباه 1: فراموش کردن علامت & در تابع scanf()
توضیح: scanf() نیاز به آدرس حافظهی متغیر دارد تا بتواند مقدار خوانده شده را در آن ذخیره کند. فراموش کردن & (عملگر آدرسدهی) میتواند منجر به خطای Segment Fault یا رفتار نامشخص برنامه شود.
راهحل سریع: همیشه قبل از نام متغیر در scanf() (به جز آرایههای کاراکتری که خودشان به آدرس اولین عنصر اشاره میکنند) از & استفاده کنید. مثال: scanf("%d", &num);
اشتباه 2: عدم مقداردهی اولیه به متغیرها
توضیح: در C، متغیرهای محلی (local variables) به صورت خودکار مقداردهی اولیه نمیشوند. اگر به آنها مقداری اختصاص ندهید، ممکن است حاوی “زباله” (garbage values) از حافظه باشند که باعث رفتار غیرقابل پیشبینی در برنامه میشود.
راهحل سریع: همیشه متغیرهای خود را قبل از استفاده با یک مقدار معتبر (مانند 0 برای اعداد) مقداردهی اولیه کنید. مثال: int count = 0;
اشتباه 3: خطاهای خارج از محدوده آرایه (Array Out of Bounds)
توضیح: دسترسی به عنصری از آرایه که خارج از محدوده تعریف شده آن است (مثلاً تلاش برای دسترسی به array[5] در یک آرایه با 5 عنصر که از array[0] تا array[4] شاخصگذاری میشود)، باعث از بین رفتن دادهها در حافظه یا کرش کردن برنامه میشود.
راهحل سریع: همیشه مطمئن شوید که شاخصهای آرایه در بازهی 0 تا اندازه_آرایه - 1 قرار دارند. در حلقهها به شرط خاتمه حلقه دقت کنید. یادگیری مدیریت حافظه و محدودیتهای آرایهها در C حیاتی است.
اشتباه 4: عدم آزاد کردن حافظهی تخصیص داده شده با malloc()
توضیح: وقتی با malloc()، calloc() یا realloc() حافظه تخصیص میدهید، مسئولیت آزاد کردن آن با free() به عهده برنامهنویس است. عدم انجام این کار منجر به نشت حافظه (Memory Leak) میشود.
راهحل سریع: هر malloc() باید با یک free() متناظر باشد. یک عادت خوب این است که به محض اینکه نیازی به حافظه ندارید، آن را آزاد کنید و اشارهگر را به NULL تنظیم کنید.