从创建/删除malloc realloc的内存块读取值?

从创建/删除malloc realloc的内存块读取值?,c,memory,memory-management,C,Memory,Memory Management,当我询问如何从malloc/realloc放入内存块的内存中读取值时 我有一个程序,它一开始创建2个内存块,一直扩展到32个。它工作正常,但为了在realloc之后不丢失值,我用一个名为koru的整数启动scanf会话。koru从0开始,在每个realloc中,我将其数字设置为内存总量的一半,因此我希望不会丢失值在realloc会话之前输入,但现在我需要读取我写入内存的内容,这样我就可以确保我没有覆盖,我如何才能做到这一点 #include "stdio.h" #include

当我询问如何从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;
    }
#包括“stdio.h”
#包括“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;

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


只需确保尊重数组边界。

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

简单的解决方案是完全删除
p2
,并将
p1
视为一个数组:

...
    scanf("%d", &p1[i]);
...
然后阅读:

int n;
for (n=0; n<i; n++)
    printf("%d ", p1[n]);
Input仅使用读/写指针,并每次递增:

...
    scanf("%d", p2++);
...
内存管理仅使用“基本”指针

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

然后,为了读取,我们将读/写指针重置为开始,并迭代:

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

对于(n=0;n请格式化代码,这看起来很糟糕!我将立即将我的值转换为英文。请检查新的codeprintf(%d,p1[3]);输出0零它是否工作或我是否出错?如果我可以从p1[0-32]读取,我的问题将得到解决,但在编译时它会给我一个错误。请帮助这就是问题:scanf(“%d”,p1);您需要扫描一个指向整数的指针,然后将其分配给p1中的一个插槽。或者,扫描F(“%d”、&p1[i]);扫描F(“%d”、&p1[i]);这就是我现在想要的,我的测试代码也能正常工作,非常感谢。但是,下面的测试代码为我提供了输入的所有数字(在输入扫描F(“%d”、&p1[i]),那么我该怎么做呢“每次输入时覆盖第一个元素。”?现在开始工作:D@BugraSezer原始代码:
scanf(“%d”,p1)
始终覆盖
p1
处的值,该值始终指向数组的开头。将该行更改为正确的行后,它会工作,这并不奇怪;)在我的辩护中,当我开始输入这个时,编辑和其他评论都不在那里。我很慢。当然,它会覆盖我同意你的观点正确的一个在上面,但无论如何,谢谢你,我也给你点。。。
p1 = (int *)malloc(boyut * sizeof(int));
p2 = p1;
...
...
    scanf("%d", p2++);
...
...
    p1 = (int *)realloc(p1, boyut * sizeof(int));
...
int n;
p2 = p1;
for (n=0; n<i; n++)
    printf("%d ", *p2++);