2016-11-21 18 views
0

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 *** 

答えて

2

使用malloc(row_size * num_rows * sizeof(int))

あなたのループがmalloc()されたメモリを超えて書き込めるように、あなたは十分なメモリをmallocしていません。セグメンテーション違反だけではないことに驚いています。

0

あなたが書く必要があります:

big_mem = (int *) malloc(row_size * num_rows * sizeof(int)); 
関連する問題