所以我想要实现的是全局变量,它表示结构的动态数组的指针,其中包含其他指向内部动态数组的指针。
所以我已经在头文件中声明了所有内容:
/*** "GLOB.h" ***/
//Dynamic Array of fixed Arrays of 4 floats each
typedef float DArray1[][4];
//Dynamic Array of Integers
typedef int DArray2[];
//Struct
struct MyStruct
{
//pointer to DArray1
DArray1 * A1;
//pointer to DArray2
DArray2 * A2;
//Length of A1 and A2
int len = 1;
//Some other simple elements of fixed size
};
//Dynamic Array of Structs
typedef MyStruct DAStructs[];
namespace GLOB
{
//pointer to DAStructs
extern DAStructs * SS;
//Few other simple variables initialized in place
};
因为我不确定我是否正确地宣布了一切 - 首先问题是:如何在C / C ++中声明这样的数据结构?
第二个(+第三个)是:如何正确地初始化并用一些可变长度来完成它?
我想初始化和终结应该是这样的:
#include "GLOB.h"
namespace GLOB
{
void Init_SS(int len) {
SS = new MyStruct*[len];
for(int k=0; k<len; k++){
SS[k].A1 = new float*[1][4];
for(int j=0; j<4; j++) SS[k].A1[0][j] = 0.0;
SS[k].A2 = new int*[1];
SS[k].A2[0] = 0;
}
}
void Fin_SS() {
int len = length(SS);
for(int k=0; k<len; k++){
delete [] SS[k].A1;
delete [] SS[k].A2;
}
delete [] SS;
}
}
但显然它只是一堆废话而不是合适的代码......
P.S。我宁愿避免使用或任何其他解决方案,因为我想首先学习,其次我需要尽可能多地控制元素将如何放置在内存中,因为以后我需要将指针传递给从DLL导入的其他函数的结构...
答案 0 :(得分:0)
没有人回答,但实际上答案很简单,因为我做的一切几乎都是正确的=)
我的第一个(也是主要的)错误是我忘了C中的数组只是第一个元素的指针,所以不是
typedef float DArray1[][4];
typedef int DArray2[];
typedef MyStruct DAStructs[];
应该是
typedef float (*DArray1)[4];
typedef int * DArray2;
typedef MyStruct * DAStructs;
并且不需要指向数组,cuz数组已经是指针lol
我的第二个错误是我忘记了(好吧,这不是我知道它=)C中的数组长度没有存储在任何地方,所以它应该是另一个变量,其中长度应该手动存储分配后。
但是我认为的整个逻辑似乎是合法的,并且它运作良好。即使我没有测试我的项目的内存泄漏,当我使用完成程序时,它似乎释放分配的内存没有任何问题......