Calloc无法从不同的.c文件访问 -

时间:2016-03-24 20:26:58

标签: c dynamic-allocation calloc

我是c&我遇到了一个新问题..

file1.c中 -

var query = plans
.Where(p => 
        p.IsOptOut ||
        (p.PropertyType == PropertyType.Property1 && p.SomeCollection.Count > 0))
.GroupBy(p => p.PropertyType) // group the result by property type so we can count the items
.Where(g => !(g.Count() == 1 && g.FirstOrDefauilt().IsOptOut)) // apply the requested criteria
.SelectMany(g => g) // flatten back the result
.Select(p =>
        new CustomClass
        {
            Id = p.Id,
            PropertyType = p.PropertyType,
            IsOptOut = p.IsOptOut
        });

和file2.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;}

之前我做过类似的事(有一点不同),但现在它崩溃了。 是什么原因 ?。 如果我将在源文件中构建一个函数,在哪里分配了内存,它将被解决?。

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

* ptr全局和本地声明

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

删除main内部的decleration 它会工作正常