2015-11-07 86 views
2

假设我们有这样的代码:动态内存分配

int *h; 

for(int i=0;i<5;i++){ 
    h = malloc(sizeof(int)); 
    h[i] = i; 
} 

我这里的问题是我要开始与空数组,即刚刚宣布int *h,然后*h将增长运行时使用realloc。我试过使用这个例子,但它没有分配一个连续的内存空间,也不起作用。我知道realloc工作分配malloc后有什么解决方法吗?

+0

这'H = malloc的(INT的sizeof)();用于''ħ只分配一个'int' – 101010

+0

你唯一分配空间[0]'和漏水先前'h' – amdixon

+2

指针不是数组! – Olaf

回答

2

为了适应您正在尝试做的事情,realloc(NULL, size)malloc(size)的功能完全相同。你可以写你的循环是这样的:

int *h = 0; 
size_t avail = 0; 

for (size_t i = 0; more_data_available(); i++) { 
    if ((i+1) * sizeof(int) > avail) { 
     avail = avail == 0 ? 8*sizeof(int) : avail*2; 
     int *nh = realloc(h, avail); 
     if (!nh) abort(); 
     h = nh; 
    } 
    h[i] = next_data_item(); 
} 

但需要注意的令人费解的?:表达我不得不使用放大avail。如果我在已经分配了一些空间的情况下启动循环,那将会更加干净;然后我可以只使用malloc正常:

size_t avail = 8 * sizeof(int); 
int *h = malloc(avail); 
if (!h) abort(); 

for (size_t i = 0; more_data_available(); i++) { 
    if ((i+1) * sizeof(int) > avail) { 
     avail *= 2; 
     int *nh = realloc(h, avail); 
     if (!nh) abort(); 
     h = nh; 
    } 
    h[i] = next_data_item(); 
} 
+0

谢谢..但它似乎不清楚我 – Mike

+0

谢谢。我知道了 – Mike

+0

我可以问另一个问题:我如何确定h的大小?我的意思是当**我想在h **中搜索一个元素时,我需要h的大小来遍历它,对吧? – Mike