自动将内存分配给数组

时间:2014-04-17 14:12:38

标签: c memory-management

我正在考虑一个程序,它在扫描时将内存并排分配给一个数组。我最终得到了这个程序,它无法正常工作! (当然我做了一个大错误;))需要帮助!提前致谢!

char *arr;
int c=1,i=0;
arr=(char*)calloc(c,sizeof(char));
do
{
    arr[i]=getch();
    printf("%c",arr[i]);
    c=c+sizeof(char);
    arr=(char*)realloc(arr,c);
    i++;
}while(arr[i-1]!=13);
arr=(char*)realloc(arr,c);
arr[i]='/0';
printf("%d",sizeof(arr));
puts(arr);
free(arr);

1 个答案:

答案 0 :(得分:2)

arr[i]='/0';

你想要的是:

arr[i] = 0;

arr[i] = '\0';

此外,请注意,经常重新分配内存是一种不好的做法。这真的是CPU消耗。

另一方面,你可以做的是拥有一个动态大小的数组,是从一个适合你使用的数字开始(比方说,200),并通过加倍重新分配每一次。这样,你可以做更少的重新分配,并且仍然具有适应性大小的数组。

char *arr;
int size = 200, i = 0;

arr = (char*) calloc(size, sizeof(char));
do
{
    arr[i] = getch();
    printf("%c", arr[i]);

    if (i + 1 > c)
    {
        c *= 2;
        arr = (char*) realloc(arr, c);
    }

    i++;
}
while(arr[i-1]!=13);

arr[i] = '\0';
printf("(%d) %s", strlen(arr), arr);
free(arr);

Also, you shouldn't cast return of malloc(), calloc() or realloc(),正如unwind所述。