码迷,mamicode.com
首页 > 编程语言 > 详细

二维数组申请问题

时间:2018-05-24 13:57:41      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:eof   超过   二维数组   ack   ++   原因   cpu   glob   nod   

最近一个二组数组申请的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));
}

就差一个星号,调了一天半的代码!

二维数组申请问题

标签:eof   超过   二维数组   ack   ++   原因   cpu   glob   nod   

原文地址:https://www.cnblogs.com/laozhuang/p/9082362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!