C ++指针不起作用

时间:2017-10-09 04:28:15

标签: c++ pointers malloc

我有这个函数来指定一个值

void asignaMatrizCostos(int n){
   int i, j;
   if (n == 4){
      for (i = 1; i <= 4; i++)
          for (j = 1; j <= 4; j++) {
             *(GLOBAL_mC++) = (i == j ? 0.0 : (double)(10 * i) + j);
          }
      }
  }

另一个打印它的功能

void imprimeCostos(int n){
   int i, j;
   for (i = 0; i < n; i++){
      for (j = 0; j < n; j++)
         cout << ' ' << (*GLOBAL_mC++);
         cout << endl;
      }
   }
}

这是我的主要

int main_ciclos(int argc, char** argv){
   int n = 4;
   GLOBAL_mC = (double*) malloc( n * n * sizeof(double));

   asignaMatrizCostos(n);
   int p[] = {3,1,2,0};
   double res = 0; // costo(p, n);

   imprimeCostos(n);
}

但是在输出中我得到了这个

enter image description here

它应该是一个带有双精度的二维数组

1 个答案:

答案 0 :(得分:1)

GLOBAL_mC = (double*) malloc( n * n * sizeof(double));
doSomethingWith(GLOBAL_mC++);

您需要考虑在这两个语句之后设置GLOBAL_mC的内容,这基本上就是您在代码中所做的事情。

提示:它不再是 数组的开头。

您需要做的是修改代码,使其根本不更改变量。例如,可以通过以下方式完成:

void asignaMatrizCostos(int n) {
    double *ptr = GLOBAL_mC;
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            *(ptr++) = (i == j) ? 0.0 : 10.0 * i + j;
        }
    }
}

您会注意到我还使用索引1..n而非0..(n-1)修复了您的问题。您可能需要根据需要调整加载到矩阵中的值。