簡體   English   中英

從創建/ mofied malloc realloc的內存塊中讀取值?

[英]Reading values from the memory block which created/mofied malloc realloc?

我問我怎樣才能從malloc / realloc放入內存塊的內存中讀取值?

我有一個程序,它首先創建2個內存塊並延伸到32.它工作正常但是為了在realloc之后不丟失值我用一個名為koru.Koru的整數開始我的scanf會話從開始時的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擴展它,並在循環中退出並從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++);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM