【问题标题】:Calloc cannot access from a different .c file-Calloc 无法从不同的 .c 文件访问-
【发布时间】:2016-03-24 20:26:57
【问题描述】:

我是 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);}

我以前做过类似的事情(有一个区别),但现在它崩溃了。 是什么原因 ?。 如果我将在源文件中构建一个函数,分配内存的位置将得到解决?。

【问题讨论】:

标签: c dynamic-allocation calloc


【解决方案1】:

您有两个名为 ptr 的变量。一个是全局变量,一个是main 的本地变量。 main 只分配本地的ptr,但随后sec 尝试使用仍然为空的全局变量。

尝试从main 中删除char* ptr=NULL; 声明,以便两个函数都使用您的全局变量。

【讨论】:

    【解决方案2】:

    *ptr 被全局和本地声明

    局部变量具有更高的优先级,因此内存分配给局部 *ptr

    删除 main 中的 decleration 它会正常工作

    【讨论】:

      猜你喜欢
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多