我有一个任务,我必须接受来自用户的输入。我不能使用链表,所以我的计划是:int数组的动态内存分配
Alloc一些内存。
如果我们需要的realloc,这意味着我达到了分配的小区数量:
尝试realloc的。如果成功,那很好。
如果我们不能重新分配,打印输入,空闲内存和realloc然后。
我真的不能决定有关,告诉我我怎么达到的分配内存的结束,这就是为什么我需要你的帮助的命令。我写道:
if (i==(MAX_CHARS_INPUT-1))
但我不确定。
代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX_CHARS_INPUT 200
#define D_SIZE 2
void printWithMalloc(){
int charSize=1;
int *ptr=malloc(MAX_CHARS_INPUT*sizeof(charSize));
int i=0, j=0, c;
printf("please enter a string\n");
while ((c=getchar())!=EOF && c!='\n')
{
ptr[i++]=c;
if (i==(MAX_CHARS_INPUT-1)) /*if we need to realloc*/
{
int *temp=realloc(ptr,D_SIZE*MAX_CHARS_INPUT*sizeof(charSize));
if (temp==NULL) /*realloc failed*/
{
printf("you wrote:\n");
while(j<=i)
putchar(ptr[j++]);
free(ptr);
ptr=(int*)malloc(MAX_CHARS_INPUT*sizeof(charSize));
}
else
ptr=temp;
}
}
}
int main(){
printWithMalloc();
return 0;
}
谢谢!
'的sizeof(charSize)'会给你一个int的大小,因为harSize是一个int。相反,只是做'的sizeof(char)的' –
更妙的是,完全忽略它,因为'的sizeof(char)的'是定义1 – glglgl
你可能要重新考虑做一个realloc的一个额外的2个字节,因为它不是很有效,如果你的环境不是嵌入式的(每个字节都是计数的),只需在空间不够的情况下添加一个100字节的块就可以减少realloc的数量。有一个变量保持缓冲区大小的轨道,当你重新分配时增加这个。 –