2014-09-06 88 views
0

我有以下代碼,代碼編譯並運行,如果我沒有嘗試打印我生成的數組,但segfault第二次嘗試打印數組。我很困惑什麼是錯的?我在mac上使用基本的valgrind工具,告訴我我試圖訪問未映射的內存區域。如果我嘗試使用printf(「%f \ n」,data [i]),則會發生此問題;數組打印段錯誤

#define matA_W 1024 
#define matA_H 1024 

void genMatrix(float* data, int size) 
{ 
    for (int i = 0; i < size; ++i) { 
    data[i] = float (rand() /RAND_MAX); 
    } 
    for (int i = 0; i < size; ++i) { 
    std::cout << data[i] << std::endl; 
    } 

} 


int main() { 
    srand(2006) 
    unsigned int size_A = matA_W * matA_H; 
    unsigned int memA = sizeof(float) * size_A; 
    float* matA = (float*) malloc(memA); 

    std::cout << size_A << std::endl; 
    std::cout << memA << std::endl; 

    genMatrix(matA,size_A); 

    return 0; 


} 
+0

開始學習貿易的正確的工具,所以你可以調試這個自己:我目前使用Valgrind的和Valgrind的,峨山,燦... – 2014-09-06 17:55:18

+0

能pin將錯誤指向一個超出範圍的數組訪問,我只是不明白爲什麼! – user1018513 2014-09-06 18:00:10

+0

順便說一下,改成'data [i] =(float)rand()/ RAND_MAX;','srand(2006);' – BLUEPIXY 2014-09-06 18:16:38

回答

1

memA應該在你的genMarix通話size_A