2016-03-24 10 views
0

: Ich bin c & ich eine neue Ausgabe traf ..calloc nicht zugreifen können aus einem anderen .c 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;} 

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

Ich habe so etwas schon einmal gemacht (mit einem Unterschied), aber jetzt stürzt es ab. Was ist der Grund? Wenn ich eine Funktion in der Quelldatei erstellen werde, wo der Speicher zugewiesen wurde, wird es gelöst?.

+0

Siehe [Variable shadowing] (https://en.wikipedia.org/wiki/Variable_shadowing). – jweyrich

Antwort

5

Sie haben zwei Variablen mit dem Namen ptr. Einer ist die globale Variable und einer ist lokal zu main. main reserviert nur den lokalen ptr, aber dann sec versucht, die globale Variable zu verwenden, die immer noch Null ist.

Versuchen Sie, die char* ptr=NULL; Deklaration von main zu entfernen, so dass beide Funktionen Ihre globale Variable verwenden.

0

* ptr ist sowohl global als auch lokal erklärt

lokal Variable hat die höhere Priorität daher die Speicher auf die lokalen * ptr

entfernen Sie die Angabe im Innern des Haupt zugeordnet wird es Adaequat