2016-03-24 12 views
0

farklı .c gelen erişemezcalloc .. ben yeni bir sorun buluştu c & azından ben yeniyim file-

file1.c-

#include <stdio.h> 
#include <stdlib.h> 

extern int sec(); 
char *ptr=NULL; 

int main(){ 
char *ptr=NULL; 

ptr=(char*)calloc(sizeof(char),8);/*8 chars.*/ 
*(ptr+0)='0'; /*first char set to 0.*/ 

printf("%c\n",*ptr); 

*(ptr+0)='r'; 
*(ptr+1)='o'; 
*(ptr+2)='i'; 
*(ptr+3)='L'; 

printf("%c %c %c %c \n",*(ptr+0),*(ptr+1),*(ptr+2),*(ptr+3)); 

sec(); 

return 0;} 

Ve file2.c-

#include <stdio.h> 
#include <stdlib.h> 

extern char *ptr; 

void sec(void){ 

puts("before."); 

*(ptr+0)='L';/*CARSH HERE.*/ 
*(ptr+1)='i'; 
*(ptr+2)='o'; 
*(ptr+3)='r'; 

puts("after."); 

printf("%c %c %c %c ",*(ptr+0),*(ptr+1),*(ptr+2),*(ptr+3)); 

free(ptr);} 

Daha önce böyle bir şey yaptım (bir farkla), ama şimdi çöküyor. Nedeni nedir? Kaynak dosyada bir işlev oluşturacak olursak, belleğin tahsis edildiği yerde çözülecek?

+0

[Değişken gölgelenme] 'ye bakınız. (Https://en.wikipedia.org/wiki/Variable_shadowing). – jweyrich

cevap

5

ptr adlı iki değişkeniniz vardır. Biri global değişkendir ve biri main'a yereldir. main yalnızca yerel ptr'u ayırır, ancak sec hala null olan global değişkeni kullanmaya çalışır.

main numaralı char* ptr=NULL; bildirimini kaldırmayı deneyin, böylece her iki işlev de genel değişkeninizi kullanır.

0

* ptr global ve yerel bildirilmiş

yerel değişken yüksek dolayısıyla hafıza yerel * ptr

tahsis edilir önceliği ana içindeki beyanınıgeçersiz kaldırmak o İnce Work edeceğiz sahiptir

İlgili konular