c-从创建/mofied malloc realloc的内存块中读取值



当我问我如何从malloc/realloc放入内存块的内存中读取值时?

我有一个程序,它一开始创建2个内存块,并扩展到32。它运行良好,但为了在realloc后不丢失值,我用一个名为koru的整数启动了我的scanf会话。Koru一开始是0,在每次realloc中,我都会让它的数字占内存总量的一半,所以我希望不会丢失在realloc会话之前输入的值,但现在我需要读取我在内存中写的内容,这样我就可以确保我没有覆盖。我该怎么做?

#include "stdio.h"
#include "stdlib.h"
int main()
{
int size=2;
int* p1;
int* p2;
int n;
p1=(int *)malloc((size*sizeof(int)));
int b=0;
int i=0;
int koru=0;   
while(size<32) 
{ 
if(i<size){           
for(i=koru;i<size;i++)
{      
printf("nEnter value:");
scanf("%d",p1);
}
}
else if(boyut=i)         
{  
size=size*2;    
p2 = (int*) realloc (p1,size*sizeof(int));
p1=p2;  
koru=size/2;
printf("nNOt enough size we make it %d also we protect %d that amount of memory"size,koru);
}
}    
return 0;
}

我想把一个数组[I]=p1;在while循环之后读取它可以解决问题,但后来我发现它是作弊的——我不是从内存块中读取,而是从另一个数组中读取,所以这也不起作用——有人能为我带路吗?

我的程序的作用:

2块内存malloc获取值并填充当它填充时,将内存大小乘以2 realloc从一半数字开始阅读,这样它就不会重写继续这一进程,直到达到32

编辑:简化问题:

在while循环之后,我在内存中放入了很多值,我该如何读取它们?

我试着这样读,但我得到的只是0

int counter =0;
while (counter<koru)
{
printf("n%d",p1[counter]);
counter++;
}
return 0;
}

正确的代码用malloc创建一个内存块,并在32后用realloc扩展它。感谢您的帮助,它退出while循环并从p1指针(从内存)写入所有内容。

以下工作代码:

#include "stdio.h"
#include "stdlib.h"
int main()
{
int boyut=2;
int* p1;
int* p2;
int n;
p1=(int *)malloc((boyut*sizeof(int)));
int b=0;
int i=0;
int koru=0;
while(boyut<16)
{
if(i<boyut){          
for(i=koru;i<boyut;i++){    
printf("nDeğer Girin:");
scanf("%d", &p1[i]);
}
}
else if(boyut=i)        
{   
boyut=boyut*2;    
p2 = (int*) realloc (p1,boyut*sizeof(int));
p1=p2;   
koru=boyut/2;
printf("nBoyut yetersiz yeni boyutu %d yapıyoruz önceki %d kadar alanı korumaya aldık",boyut,koru);
}
}
int counter =0;
while (counter<koru)
{
printf("n%d",p1[counter]);
counter++;
}
return 0;
} 

我不确定你在这里问的是什么,但要访问内存中的值,只需使用p1作为数组。p1[3]将给出内存块中的第4个整数。

只要确保尊重数组的边界。

额外的问题:您甚至没有填充数组,每次输入都会覆盖第一个元素。

简单的解决方案是完全去除p2,并将p1视为一个阵列:

...
scanf("%d", &p1[i]);
...

然后阅读:

int n;
for (n=0; n<i; n++)
printf("%d ", p1[n]);

但是,如果要使用两个指针而不是数组索引,则需要一个指针来跟踪mallocrealloc的整个数组,另一个指针跟踪当前值的读/写位置。

最初数组是空的,所以它们是相同的:

p1 = (int *)malloc(boyut * sizeof(int));
p2 = p1;
...

输入使用读/写指针,每次递增:

...
scanf("%d", p2++);
...

内存管理使用"基本"指针

...
p1 = (int *)realloc(p1, boyut * sizeof(int));
...

(注意,您应该严格使用realloc()的返回值的临时变量来检查故障,否则可能会丢失p1的值)

然后,为了读取,我们将读/写指针重置为起点,并迭代通过:

int n;
p2 = p1;
for (n=0; n<i; n++)
printf("%d ", *p2++);

最新更新