由于在C

时间:2018-04-03 15:33:12

标签: c file pointers reference file-handling

我有以下代码,其中,我将一个内存地址返回给指针,该指针的位置用于存储字符串。 代码看起来像这样:

char* segs[1];
segs[0] = (char *) myfunction("name", 100);
//myfunction(Name,size of the memory to be allocated)

FILE *write_log;
write_log = fopen(redo_path,"a+");

函数myfunction返回一个内存位置,该位置固定为segs [0]的基址。 我的内存分配如下:

FILE *fp_seg;
fp_seg = fopen(compare,"r");
//maps from disk to mem
void *p;
p = (void *)malloc(size_to_create); //Mapping
int c;
c = fread(p,size_to_create,1,fp_seg);

我们在磁盘上打开一个文件,并生成文件中第一个位置的地址的相应映射。 (p更多地是对文件中第一个位置的引用)。

ISSUE:

使用write_log文件指针打开现有文件会破坏存储在内存位置segs [0]的字符串的内容。在调试时,我发现文件跨越的内存区域和segs [0]重叠,即

segs[0]的内存位置为0x1cc5de0并存储"Hello, world"

write_log的内存位置为0x1cc5d50

我的猜测是在该位置打开文件会破坏seg[0]的内容。

我如何克服这个问题?有没有办法分配内存,使区域不重叠?

修改 我的功能是这样的:

myfunction(char * compare, int size_to_create)
{
//size_to_create is the size of the memory we want to allocate to seg[0]
//Create a file with the name compare in the disk
FILE *fp_seg;
fp_seg = fopen(compare,"r");

//Read the file (File has no content as of now)

void *p;
p = (void *)malloc(size_to_create); //p has an address in main memory
int c;
c = fread(p,size_to_create,1,fp_seg);

void *t;
t=p;
//Future reads will have the same mapping 

free(p); 
}

1 个答案:

答案 0 :(得分:2)

问题在于释放指针p,释放内存。

因此,系统没有限制将最初由p指向的区域分配给请求内存的代码的另一部分。