c-malloc()内存损坏



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

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 %dn", check);
        }           
    }
    addresses[i] = malloc(strlen(buffer)); /* get memory for number of chars in each line */
    printf("2 %dn", 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]

是什么原因造成的?

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

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

相关内容

  • 没有找到相关文章

最新更新