c语言 - 访问时出现运行时错误 (table->array[i][i]).min = (table->array[i][i]).max = arr[i];



我正在使用DP填充一个表,其中包含数组中从索引i到索引j的最大和最小项目。这种方法是否有效,对我来说不是问题。
请考虑以下代码片段:

typedef struct Slot
{
    int min;
    int max;
}Slot;
typedef struct Table
{
    Slot* *array;
    int size;
}Table;
Table* createTable( int size )
{
    Table* table = malloc( sizeof( Table ) );
    if( !table )
            return NULL;
    table->array = ( Slot(*)[size] ) malloc( size * size * sizeof( Slot ) );
    if( !(table->array) )
                    return NULL;
    table->size = size;
    return table;
}
void foo( int arr[], int size )
{
    Table* table = createTable( size );
    if( table == NULL )
    {
            printf( "Out of memory" );
            return;
    }
    int i;
    for( i = 0; i < size; ++i )
            (table->array[i][i]).min = (table->array[i][i]).max = arr[i]; <----------
}

我收到运行时错误。当我评论以下两个语句时,它运行良好。

for( i = 0; i < size; ++i )
            (table->array[i][i]).min = (table->array[i][i]).max = arr[i]; <----------

为什么它显示运行时错误?

2D 数组Slotmalloc是错误的:

table->array = ( Slot(*)[size] ) malloc( size * size * sizeof( Slot ) );

与其这样做,不如这样做:

 table->array = (Slot**) malloc(sizeof(Slot*));
   for (int i = 0; i < ArraySizeX; i++)
        table->array[i] = (Slot*) malloc(ArraySizeY*sizeof(Slot));

或者,如果您希望在一次malloc调用中执行此操作,但是,则只需在TableSlot*

table->array = (Slot*) malloc(SizeX * SizeY * Sizeof(Slot));

这将正确分配您的双精度数组。

然后,这个构造也:

  for( i = 0; i < size; ++i )
     (table->array[i][i]).min = (table->array[i][i]).max = arr[i];

你真的应该一次做一个作业:

  for( i = 0; i < sizeX; ++i )
  {
      (table->array[i][i]).max = arr[i];
      (table->array[i][i]).min = (table->array[i][i]).max;
  }

相关内容

  • 没有找到相关文章

最新更新