EEM-120 Algoritma ve Programlama II Dersi
2022-2023 Bahar Dönemi Konu 6
Dinamik Bellek Tahsisi
- malloc: bellekte bir yer ayırır
- calloc: bellekte bir yer ayırır ve burayı temizler
- realloc: daha önce bellekte ayrılan yerin boyutunu değiştirir.
- free: bellek ayrılan yeri serbest bırakır.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *p;
int a=20;
//heap bellek bolgesi
p = (int*)malloc(4);
*p=10;
printf("%u\n",p);
printf("%d\n",*p);
//stack bellek bolgesi
p=&a;
printf("%u\n",p);
printf("%d\n",*p);
return 0;
}
3925096592
10
4060758396
20
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *p;
int a=20;
//heap bellek bolgesi
p = (int*)malloc(sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
*p=10;
printf("%u\n",p);
printf("%d\n",*p);
//stack bellek bolgesi
p=&a;
printf("%u\n",p);
printf("%d\n",*p);
return 0;
}
3999324304
10
4136036428
20
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *p;
int a=20;
//heap bellek bolgesi
p = (int*)malloc(sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
if(!p){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
if(p!=NULL){
//program calisma kodlari
}
if(p){
//program calisma kodlari
}
return 0;
}
3999324304
10
4136036428
20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *p;
p = (char*)malloc(40*sizeof(char));
if(!p){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
strcpy(p, "Programlama");
printf("%s",p);
free(p);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* metin_oku(void){
char *str;
printf("bir metin giriniz: ");
if((str=malloc(40*sizeof(char)))==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
scanf("%s",str);
return str;
}
int main(int argc, char *argv[]) {
char *x;
x=metin_oku();
printf("fonksiyondan girilen metin: %s", x);
free(x);
return 0;
}
bir metin giriniz:
bir_metin
fonksiyondan girilen metin: bir_metin
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n, i, *p;
printf("kac tane veri girilecek");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
printf("%d tane sayı giriniz: \n",n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
printf("Girilen %d tane sayı: \n",n);
for(i=0;i<n;i++)
printf("%d ",p[i]);
free(p);
return 0;
}
kac tane veri girilecek
5
5 tane sayı giriniz:
1
2
3
4
5
Girilen 5 tane sayı:
1 2 3 4 5
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n, i, *p;
printf("kac tane veri girilecek");
scanf("%d",&n);
p=(int*)calloc(n,sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
printf("%d tane sayı giriniz: \n",n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
printf("Girilen %d tane sayı: \n",n);
for(i=0;i<n;i++)
printf("%d ",p[i]);
free(p);
return 0;
}
kac tane veri girilecek
5
5 tane sayı giriniz:
10
20
30
40
50
Girilen 5 tane sayı:
10 20 30 40 50
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n, i, *p;
printf("kac tane veri girilecek");
scanf("%d",&n);
p=(int*)calloc(n,sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
printf("%d tane sayı giriniz: \n",n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
printf("Girilen %d tane sayı: \n",n);
for(i=0;i<n;i++)
printf("%d ",p[i]);
printf("Yeni veri sayisini giriniz: ");
scanf("%d",&n);
p=realloc(p,n*sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
printf("%d tane sayı giriniz: \n",n);
for(i=0;i<n;i++)
scanf("%d",&p[i]);
printf("Girilen %d tane sayı: \n",n);
for(i=0;i<n;i++)
printf("%d ",p[i]);
free(p);
return 0;
}
kac tane veri girilecek
3
3 tane sayı giriniz:
2
4
6
Girilen 3 tane sayı:
2 4 6 Yeni veri sayisini giriniz:
6
6 tane sayı giriniz:
1
2
3
4
5
6
Girilen 6 tane sayı:
1 2 3 4 5 6
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int n, i, *p, n1;
printf("kac tane veri girilecek");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
if(p==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
printf("%d tane sayı giriniz: \n",n);
for(i=0;i<n;i++)
scanf("%d",(p+i));
printf("Girilen %d tane sayı: \n",n);
for(i=0;i<n;i++)
printf("%d ",*(p+i));
printf("Yeni veri girilecek mi? girilece veri sayisini giriniz:");
scanf("%d",&n1);
p=(int*)realloc(p,(n+n1)*sizeof(int));
for(i=n;i<n+n1;i++)
scanf("%d",(p+i));
printf("Dizinin son hali: \n");
for(i=0;i<n+n1;i++)
printf("%d ",*(p+i));
free(p);
return 0;
}
kac tane veri girilecek
3
3 tane sayı giriniz:
1
2
3
Girilen 3 tane sayı:
1 2 3 Yeni veri girilecek mi? girilece veri sayisini giriniz:
4
4
5
6
7
Dizinin son hali:
1 2 3 4 5 6 7
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *p, *q;
p=malloc(40);
q=malloc(50);
//burada baska kodlamalar olsun
p=q;
//burada baska kodlamalar olsun
free(p);
free(q);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int *p, *q;
p=malloc(40);
q=malloc(50);
//burada baska kodlamalar olsun
free(p);
p=q;
//burada baska kodlamalar olsun
free(p);
free(q);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
char *p[5];
int i;
for(i=0;i<5;i++){
p[i]=(char*)malloc(20*sizeof(char));
if(p[i]==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
}
for(i=0;i<5;i++)
strcpy(p[i], "metin");
for(i=0;i<5;i++)
printf("%s\n",p[i]);
for(i=0;i<5;i++)
free(p[i]);
return 0;
}
metin
metin
metin
metin
metin
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int sicil;
char isim[50];
float maas;
} Calisan;
int main(int argc, char *argv[]) {
Calisan *p_calisan;
p_calisan=(Calisan*)malloc(sizeof(Calisan));
if(p_calisan==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
p_calisan->sicil=10;
strcpy(p_calisan->isim, "isim soyisim");
p_calisan->maas=15000;
printf("Calisan sicil no: %d\n", p_calisan->sicil);
printf("Calisan maas no: %f\n", p_calisan->maas);
printf("Calisan isim no: %s\n", p_calisan->isim);
free(p_calisan);
return 0;
}
Calisan sicil no: 10
Calisan maas no: 15000.000000
Calisan isim no: isim soyisim
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
int sicil;
char isim[50];
float maas;
} Calisan;
Calisan* kisi_olustur(void){
Calisan *p_calisan;
p_calisan=(Calisan*)malloc(sizeof(Calisan));
if(p_calisan==NULL){
printf("Bellekte yer ayrilamadi.");
exit(1);
}
p_calisan->sicil=10;
strcpy(p_calisan->isim, "isim soyisim");
p_calisan->maas=15000;
return p_calisan;
}
int main(int argc, char *argv[]) {
Calisan *p;
p=kisi_olustur();
printf("Calisan sicil no: %d\n", p->sicil);
printf("Calisan maas no: %f\n", p->maas);
printf("Calisan isim no: %s\n", p->isim);
free(p);
return 0;
}
Calisan sicil no: 10
Calisan maas no: 15000.000000
Calisan isim no: isim soyisim