1. ホーム
  2. c

[解決済み] エラー free(): 次のサイズが無効です (高速)

2022-02-09 08:28:12

質問

とても簡単なプログラムで、データをmalloc()して、初期化し、解放するのですが、このエラーが何度も出ます。なぜこのようなことが起こるのか見当もつきませんが、何かアイデアはありますか?

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

int main(){
    int * big_mem;
    int row_size = 4096; //not sure about this....
    int num_rows = 5;
    int const_val = 0xFFFFFFFF;

    big_mem = (int *) malloc(row_size * num_rows);
    if(!big_mem){
        printf("Failed to malloc, exiting...");
        return 0;
    }

    i = 0;  
    for(; i < row_size * num_rows; ++i){
        big_mem[i] = const_val;
    }
    printf("Initialized mem, ");

    free(big_mem);
    big_mem = NULL;

    return 0;
}

出力します。

*** Error in `./test': free(): invalid next size (fast): 0x0000000000819010 ***

解決方法は?

使用方法 malloc(row_size * num_rows * sizeof(int)) .

メモリのmallocが足りず、ループがmalloc()したメモリを超えて書き込んでいます。セグメンテーションフォールトが発生しないのが不思議なくらいです。