【问题标题】:Arrays - error: incompatible types in assignment数组 - 错误:赋值中的类型不兼容
【发布时间】:2012-11-13 06:25:26
【问题描述】:

我有一个问题,我认为可能有一个简单的答案,但我在任何地方都没有找到任何文件来证实我的怀疑。

我的程序是将两个方阵相乘,整个代码有点长,所以我只是将相关部分粘贴在下面。编译代码时,我不断收到“错误:分配中的类型不兼容”消息。我正在尝试用 a、b 和 c 的相应部分分配子矩阵 suba、subb、subc。这是因为我使用变量 v 和 w int 第 28 - 32 行吗?另外,为了确保我有正确的概念,如果我将矩阵的左上角分配给“子矩阵”,那么我只是分配一个指针(例如 subb)从大的指定位置开始矩阵,对吧?

提前感谢您的帮助!非常感谢

struct threads
{
  pthread_t id; //The thread id to use in functions
  int n; //size of block
  float **suba; //Sub-matrix a
  float **subb; //Sub-matrix b
  float **subc; //Sub-matrix c
};

int main( int argc, char* argv[ ] )
{
  int n; // dimension of the matrix
  int p; // number of threads in the program
  float *sa, *sb, *sc; // storage for matrix A, B, and C
  float **a, **b, **c; // 2-d array to access matrix A, B, and C
  int i, j;
  struct threads* t;

  t = ( struct threads* ) malloc( p * sizeof( struct threads ) );

  int x = -1;
  int z;
  for( z = 0; z < p; z++ )
  {
    t[ z ].n = n / sqrt( p );
    if( fmod( z, sqrt( p ) ) == 0 )
      x++;
    int w = ( int )( x * n / sqrt( p ) );
    int v = ( int )( fmod( z, sqrt( p ) ) * n / sqrt( p ) );
    t[z].suba = a[ w ][ v ];
    t[z].subb = b[ w ][ v ];
    t[z].subc = c[ w ][ v ];

    //pthread_create( &t[ z ].id, 0, threadWork, &t[ z ] );
  }

  return 0;
}

【问题讨论】:

标签: c


【解决方案1】:

t[z].suba 的类型为 float **

a[w][v] 的类型为 float。

你是说

t[z].suba[w][v] = a[w][v]; ?

【讨论】:

  • 我没有注意到那部分,那是我的错误。我试图让t[z].suba 的左上角等于a[w][v]。但我刚刚意识到,为了实现这一点并且不会出现分段错误,我需要初始化suba, subb, subc 的两个维度,谢谢您的帮助!回到绘图板。
猜你喜欢
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
相关资源
最近更新 更多