1. 程式人生 > >二維數組申請問題

二維數組申請問題

eof sizeof 記錄 malloc all oba size 再次 glob

最近一個二組數組申請的BUG調了一天半,記錄下來。

問題描述:首先是在CPU端申請內存,然後在GPU端申請內存。當處理小圖時不報錯,當圖的規模超過一定值時,GPU端申請內存報錯為:內存超界。

問題原因:內存申請的問題,麻煩在於當時不會報錯,再次運行不下去了,才會報錯,導致報錯的位置不準確。在二維數組申請時,一定要註意第一維和第二維申請時的差別。

問題改正:

原代碼:

HGLOBAL::gpu_def[i].nodes_link=(int **)malloc((HGLOBAL::gpu_def[i].nodes_count_class1 + 1) * sizeof(int));
for( j = 0; j <= HGLOBAL::gpu_def[i].nodes_count_class1; j++)
{
printf("j = %d\n",j);
HGLOBAL::gpu_def[i].nodes_link[j] = (int *)malloc((HGLOBAL::total_nodes_count + 2)* sizeof(int)); //XXXXXXXXXXXXXXXX
memset(HGLOBAL::gpu_def[i].nodes_link[j],0,(HGLOBAL::total_nodes_count + 2)* sizeof(int));
}

改正代碼:

HGLOBAL::gpu_def[i].nodes_link=(int **)malloc((HGLOBAL::gpu_def[i].nodes_count_class1 + 1) * sizeof(int *));
for( j = 0; j <= HGLOBAL::gpu_def[i].nodes_count_class1; j++)
{
printf("j = %d\n",j);
HGLOBAL::gpu_def[i].nodes_link[j] = (int *)malloc((HGLOBAL::total_nodes_count + 2)* sizeof(int)); //XXXXXXXXXXXXXXXX
memset(HGLOBAL::gpu_def[i].nodes_link[j],0,(HGLOBAL::total_nodes_count + 2)* sizeof(int));
}

就差一個星號,調了一天半的代碼!

二維數組申請問題