【问题标题】:C++ values of global float pointers changes from function全局浮点指针的 C++ 值从函数更改
【发布时间】:2014-07-03 05:20:32
【问题描述】:

我声明了一个全局浮点二维指针。在单独的函数中分配内存并在另一个函数中初始化。但是当值时,它因函数而异。

float **x; // Global 
int i,j;  // Global

void init(){
    x = new float *[2];
    for(i=0;i<2;i++)
        x [i] = new float [60];
}

void calc(){
    for(i=0;i<2;i++)  
        for(j=0;j<60;j++)
        x[i][j]= // Some calculation

    for(i=0;i<2;i++){
        for(j=0;j<60;j++) 
            cout<<x[i][j]<<" "; // Here it prints a value1
        cout<<"\n";
    }
}

void main(){
    init();
    calc();
    for(i=0;i<2;i++){
        for(j=0;j<60;j++) 
            cout<<x[i][j]<<" "; // Here it entirely different value (1st 2 different values and rest as 0)
}

我必须在用户定义大小的所有函数中使用二维浮点指针。除了全局声明还有什么更好的方法吗??

【问题讨论】:

  • 有什么令人信服的理由不能使用std::vector?此外,您在每段代码中都在越界访问外部数组。该外部数组包含 2 个元素,但每个循环总共迭代 3 个元素。
  • 你在init()的范围外访问外部数组。
  • 抱歉输入错误,现已更正。

标签: c++ pointers global-variables declaration


【解决方案1】:

首先,您应该使用 std::vector 而不是带有“naked new”的浮点指针。没有理由将 i 和 j 声明为全局变量,因为它们仅用作浮点值的循环变量。

其次,回答你的问题:“有没有比全局变量更好的方法?”

  1. 对于这个简单的代码,只需将它们作为参数传递给函数并在 main 中声明它们。
  2. 如果这不是一个具有代表性的示例,那么您应该考虑使用结构或数组来表示数据和对其进行操作的方法。毕竟,这就是面向对象编程的重点:将数据和对这些数据进行操作的函数放在同一个地方。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多