程序崩溃malloc / free,C

时间:2015-01-26 11:32:38

标签: c malloc

#include <stdio.h>
#include <stdlib.h>

int tablou(n)
{
    int *buffer, i=0;
    buffer=(int*)malloc(n+1);
    if (buffer==NULL) exit(1);
    for(i=0; i<=n; i++){
        buffer[i]=i;
    printf ("%d ", buffer[i]);
    }
    //free(buffer);
    //printf("%d ", n);
    return 0;
}
int main()
{
    int n;
    printf("nr of elements:\n");
    scanf("%d", &n);
    tablou(n);
    printf("Hello world!\n");
    return 0;
}

它在第14行崩溃:

free(buffer);

如果我没有释放内存,程序会在打印Hello world后出错! 如果我释放内存,它会在此之前发出错误。

1 个答案:

答案 0 :(得分:4)

由于malloc以字节为单位分配空间,并且一个整数宽度超过1个字节,因此

buffer = (int*)malloc(n+1);

应该是

buffer = malloc((n+1) * sizeof(int));

您应该为n + 1整数分配空间。所以你必须将它乘以类型的大小。

更清洁,更易于维护的方法是

buffer = malloc((n + 1) * sizeof(*buffer));