malloc()内存损坏

时间:2015-04-06 06:16:37

标签: c memory malloc corruption

我正在编写一个程序来从文件中读取任意数量的行(第一行是我不需要的标题),并为它们动态分配内存。

char buffer[350];
char** addresses;
char** temp;
int i = 0;
int check = 10;

addresses = malloc(sizeof(char*) * check); /* let's start with 10 potential  addresses */

if(addresses == NULL){
    printf("Unable to allocate memory.\n");
    exit(1);}

fgets(buffer, sizeof(buffer), stdin); /* call this once to get past the header line */


while(fgets(buffer, sizeof(buffer), stdin) != NULL)
{

    if(i > check) /* we need more memory */
    {
        temp = realloc(addresses,(2*check)*sizeof(char*)); /* double the memory we have */
        if(temp == NULL)
        {
            printf("Unable to re-allocate memory");
            exit(1);
        }
        else
        {
            addresses = temp;
            check *= 2;
            printf("reallocating to %d\n", check);
        }           
    }

    addresses[i] = malloc(strlen(buffer)); /* get memory for number of chars in each line */
    printf("2 %d\n", i);
    strcpy(addresses[i],buffer);
    i++;
}

当我运行它时,我收到内存损坏错误:

reallocating to 20
reallocating to 40
reallocating to 80
reallocating to 160
reallocating to 320
reallocating to 640
*** glibc detected *** ./a.out: malloc(): memory corruption:     0x0000000007721310 ***
======= Backtrace: =========
/lib64/libc.so.6[0x37f0a71fbe]
/lib64/libc.so.6(__libc_malloc+0x6e)[0x37f0a73dfe]
./a.out[0x400789]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x37f0a1d9f4]
./a.out[0x4005d9]

是什么导致这种情况?

1 个答案:

答案 0 :(得分:2)

addresses[i] = malloc(strlen(buffer)); /* get memory for number of chars in each line */
printf("2 %d\n", i);
strcpy(addresses[i],buffer);

您没有为终止NUL字符分配空间。