以下代码出现错误:“munmap_chunk():无效指针”

问题描述 投票:0回答:1

使用命令编译了以下代码片段:

gcc -g -std=c99 src.c

src.c:

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

void fill(int* arr, int len, int val) {
    for (int i = 0; i < len; ++i) arr[i] = val;
}

int main()
{
    printf("Hello World\n");
    int *p1, *p2;
    int *arr1 = malloc (sizeof(int) * 10);
    int *arr2 = malloc (sizeof(int) * 10);
    printf("BEFORE======================\narr1=%p, arr2=%p\n", arr1,arr2);
    fill(arr1, 10, 17);
    fill(arr2, 10, 23);
    p1 = &arr1[9];
    p2 = &arr2[9];
    printf("values at addresses %p, %p are respectively: %d, %d\n", p1, p2, *p1, *p2);
    arr1 = realloc(arr1, 200);
    arr2 = realloc(arr2, 200);
    printf("AFTER======================\narr1=%p, arr2=%p\n", arr1,arr2);
    fill(arr1, 200, 239);
    fill(arr2, 200, 347);
    printf("values at addresses %p, %p are respectively: %d, %d\n", p1, p2, *p1, *p2);
    p1 = &arr1[99];
    p2 = &arr2[99];
    printf("values at addresses %p, %p are respectively: %d, %d\n", p1, p2, *p1, *p2);
    free(arr2);
    free(arr1);
    
    return 0;
}

我只是尝试动态内存分配。令我惊讶的是,arr2 上的免费通话崩溃了。 从内存转储看来,重新分配后,数组是重叠的,我不确定为什么。

c malloc dynamic-memory-allocation realloc
1个回答
0
投票

realloc
的第二个参数是以字节为单位的大小。

因此在这一行中:

arr1 = realloc(arr1, 200);
arr2 = realloc(arr2, 200);

您为

arr1
arr2
分配了 200 个字节,而不是元素。

要修复它,请将其更改为:

arr1 = realloc(arr1, sizeof(int) * 200);
arr2 = realloc(arr2, sizeof(int) * 200);
© www.soinside.com 2019 - 2024. All rights reserved.