C pengurusan ingatan
Bab ini akan menerangkan pengurusan memori dinamik dalam C. Bahasa C menyediakan beberapa fungsi untuk peruntukan dan pengurusan memori. Fungsi ini boleh didapati dalam fail pengepala <stdlib.h>.
Nombor siri | Fungsi dan perihalan | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Fungsi ini memperuntukkan tatasusunan dengan numelemen, setiap elemen Saiz ialahsaiz bait. | ||||||||||
2 | void free(void *address); . | |||||||||
3 | void *malloc(int num); Tatasusunan bait dan mulakannya. | |||||||||
4 | void *realloc(void *address, int newsize); untuk memberitakan. |
char name[100];
Walau bagaimanapun, jika anda tidak mengetahui terlebih dahulu panjang teks yang diperlukan untuk disimpan, contohnya anda ingin menyimpan huraian terperinci topik yang berkaitan. Di sini, kita perlu menentukan penunjuk yang menunjuk kepada aksara dengan saiz memori yang tidak ditentukan, dan kemudian memperuntukkan memori mengikut permintaan, seperti yang ditunjukkan di bawah: #include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char name[100]; char *description; strcpy(name, "Zara Ali"); /* 动态分配内存 */ description = malloc( 200 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description );}Apabila kod di atas disusun dan dilaksanakan, Ia akan menghasilkan keputusan berikut:
Name = Zara AliDescription: Zara ali a DPS student in class 10thAtur cara di atas juga boleh ditulis menggunakan
calloc(), cuma gantikan malloc dengan calloc, seperti yang ditunjukkan di bawah:
calloc(200, sizeof(char));Apabila memperuntukkan memori secara dinamik , anda mempunyai kawalan penuh dan boleh melepasi nilai dalam sebarang saiz. Tatasusunan dengan saiz yang telah ditetapkan tidak boleh diubah saiznya setelah ditentukan. Ubah saiz memori dan lepaskan memoriApabila atur cara keluar, sistem pengendalian secara automatik akan mengeluarkan semua memori yang diperuntukkan kepada atur cara, bagaimanapun, anda disyorkan untuk memanggilnya apabila anda melakukannya tidak memerlukan memori. Fungsi
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char name[100]; char *description; strcpy(name, "Zara Ali"); /* 动态分配内存 */ description = malloc( 30 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcpy( description, "Zara ali a DPS student."); } /* 假设您想要存储更大的描述信息 */ description = realloc( description, 100 * sizeof(char) ); if( description == NULL ) { fprintf(stderr, "Error - unable to allocate required memory\n"); } else { strcat( description, "She is in class 10th"); } printf("Name = %s\n", name ); printf("Description: %s\n", description ); /* 使用 free() 函数释放内存 */ free(description);}<🎜>Apabila kod di atas disusun dan dilaksanakan, ia menghasilkan keputusan berikut: <🎜>
Name = Zara AliDescription: Zara ali a DPS student.She is in class 10th<🎜>Anda boleh Jika anda cuba tanpa memperuntukkan semula memori tambahan, fungsi strcat() akan menjana ralat kerana memori tidak mencukupi untuk menyimpan penerangan. <🎜><🎜>