2016-03-24 8 views
0

異なるが.cからアクセスすることはできませんのcallocは..私は新しい問題に出会っC &で、私は新しいですファイル -

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;} 

そして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);} 

私はこれの前に(1つの違いで)何かをしましたが、今はクラッシュします。 その理由は何ですか? ソースファイルに関数をビルドすると、割り当てられたメモリはどこで解決されますか?

+0

[可変シャドーイング](https://en.wikipedia.org/wiki/Variable_shadowing)を参照してください。 – jweyrich

答えて

5

ptrという2つの変数があります。 1つはグローバル変数で、1つはローカルmainです。 mainはローカルptrだけを割り当てますが、secはまだNULLのグローバル変数を使用しようとします。

からchar* ptr=NULL;宣言を削除して、両方の関数がグローバル変数を使用するようにしてください。

0

* ptrが両方のグローバルとローカルで宣言され

ローカル変数が高いので、メモリがローカル* PTR

に割り当てられている優先順位メイン 内部declerationを削除するには、細かい作業でしょうがあり

関連する問題