2010-12-06 62 views
0

例如,我不得不矩阵无法检测到任何错误,但我的程序挂起

Allocation Matrix 

    0 0 1 0 
    2 0 0 1 
    0 1 2 0 

    Request matrix 
    2 0 0 1 
    1 0 1 0 
    2 1 0 0 

    Resources in Existence: 4 2 3 1 
    Available resources: 2 1 0 0 

我的代码

  for (w = 0; w < TRows;) 
      { 
       if (Finish[w] == 0) 
       { 
        flag = 0; 
        for (x = 0; x < TColumns; x++) 
        { 
         if (A[x] >= Request[w, x]) 
          flag = flag + 1; 
        } 
        if (flag == TColumns) 
        { 
         T[y] = w; 
         Finish[w] = 1; 
         for (x = 0; x < TRows; x++) 
         { 
          A[x] = A[x] + Allocation[w, x]; 
         } 
         y = y + 1; 
         w = -1; 
         //break; 
        } 
        w++; 
       } 
      } 
+1

你一定要用调试器完成它。 – Artemiy 2010-12-06 17:54:35

回答

2

首先,使用更多的描述性变量名称。你的代码几乎不可读。我做了点但至少有一个问题:

for (w = 0; w < TRows;) 
{ 
    if (Finish[w] == 0) 
    { 
     /* snip */ 
     w++; 
     /* snip */ 
    } 
} 

如果Finish[w](这意味着什么)永远结束了比0别的东西。 w永远不会增加,并且你已经有了一个无限循环。如果它始终是0,那么您就不需要该测试。这里的逻辑有些问题。

2

这行看起来不正确的。

for (w = 0; w < TRows;) 

如果Finish[0]非零,该循环如何完成?

您是否尝试过Visual Studio中的Debug-Break-All以查看它挂起的位置?

相关问题