C ++中的Struct Array(Rad Studio 10.1 - 适用于Android的应用程序)

时间:2018-05-08 07:56:26

标签: android arrays c++builder

我通常在C ++ for Windows中广泛使用struct数组,在构造函数和析构函数中分别通过new和delete分配内存。

这是我的第一个Android应用程序。

应用程序崩溃,自从我将第一个数组从简单中更改后 在头文件中定义为float AccelZ [1000] 用作AccelZ [i]

到头文件中定义的struct数组,并在FormCreate和FormDestroy事件中使用new和delete。 并用作AccelArray [i] - > Z

Android中没有使用struct数组吗?但如果是这种情况,那么我原本期望编译错误。

由于

现在编辑:

在头文件中:

const int MAXTIMESTEPS = 20000;  
struct AccelerationRecord  
{  
    float Z;  
};  

在公共场合下:

AccelerationRecord* Acceleration[MAXTIMESTEPS];

在FormCreate下的.cpp文件中在Windows中我会把它放在构造函数中,但这对Android应用程序不起作用(我是Android应用程序的新手)

void __fastcall TTabbedwithNavigationForm::FormCreate(TObject *Sender)
{  
    for (int i; i < MAXTIMESTEPS; i++)  
      Acceleration[i] = new AccelerationRecord;  
>>snip other code    
}  

在FormDestroy下(用于将其放在Windows应用程序中的析构函数中)

void __fastcall TTabbedwithNavigationForm::FormDestroy(TObject *Sender)  
{  
    for (int i; i < MAXTIMESTEPS; i++)  
      delete Acceleration[i];  
}  

稍后在应用中,第一次用作

if (MotionSensor1->Sensor-
>AvailableProperties.Contains(TCustomMotionSensor::TProperty::AccelerationZ))  
{  
lbAccelerationZ->Text = lbAccelerationZ->Text.sprintf(L"Acceleration Z: %6.2f",MotionSensor1->Sensor->AccelerationZ+1);  
Counter += 1;  
Acceleration[Counter]->Z = MotionSensor1->Sensor->AccelerationZ+1;  
//crashes at this line in debug mode  
>> snip other code  
}  

1 个答案:

答案 0 :(得分:0)

首先:

for (int i; i < MAXTIMESTEPS; i++)

应该是

for (int i=0; i < MAXTIMESTEPS; i++)

使用未初始化的i,您可以从界限中访问数组,从而导致崩溃。你也一样:

Counter += 1;

我看到没有绑定检查也没有初始化所以上帝知道Counter的价值是什么。

第二我更习惯这个:

// "globals"
const int MAXTIMESTEPS = 20000; 
struct AccelerationRecord  
    {  
    float Z;  
    };  
AccelerationRecord* Acceleration=NULL;

// init
Acceleration = new AccelerationRecord[MAXTIMESTEPS];

// here do your stuff on AccelerationRecord[i]
AccelerationRecord[7].z=-1.5;

// exit
delete[] Acceleration;

new/delete[]比为每条记录调用它要好得多,原因有两个。首先,你要减少内存管理器(减少开销),然后通过这种方式获得连续的内存块,并且只记住相同内容的单个指针,而不是20000使用更少的内存并具有更快的线性访问...