在不知道大小的情况下在Borland c++构建器中定义AnsiString矩阵
Defining an AnsiString matrix in Borland C++ builder without knowing the size
我有以下代码:
int cl = value1;
int fl = value2;
AnsiString **mat = NULL;
mat = (AnsiString **)malloc(sizeof(AnsiString)*fl);
for(int i=0; i < fl; i++) mat[i]=(AnsiString *)malloc(sizeof(AnsiString)*cl);
int count = 0;
for (int f=0; f<fl; f++){
for (int c=0; c<cl; c++){
if (count < str.Length()) mat[f][c]=str[++count];
else mat[f][c]='X';
}
}
但它不起作用。我读了几本"如何做"的书,但我找不到正确的方法。
我对malloc这个东西很陌生,所以任何建议/帮助都会很感激。
非常感谢。
永远不要使用malloc分配非pod对象,比如:
mat[i]=(AnsiString *)malloc(sizeof(AnsiString)*cl)
对象的构造函数不会被调用(之后必须使用放置new操作符手动调用它)。上面这行只是请求内存错误。
使用new[]
操作符代替:
AnsiString **mat = mat = new AnsiString*[fl];
for(int i=0; i < fl; i++) mat[i] = new AnsiString[cl];
您仍然可以使用mat[m][n]
访问对象,其中m
是行号,n
是列号。
不要忘记使用delete[]
释放内存:
for(int i=0; i < fl; i++) delete[] mat[i];
delete[] mat;
然而,像这样使用new[]
/delete[]
,如果你不小心的话,仍然容易出错。我建议您使用std::vector
,并让它为您管理所有内存:
std::vector< std::vector<AnsiString> > mat( f1 );
for( i = 0; i < f1; ++i ) mat[i].resize( c1 );
您仍然可以使用mat[m][n]
访问对象,但是您不必担心释放任何东西,因为当它超出作用域时,它会自动释放自己。
相关文章:
- 用矩阵将函数中的整数值替换定义的常量
- Clang,OpenMP和自定义矢量/矩阵缩减
- Eigen对修复非正定义的协方差矩阵有解吗
- 如何根据传递给函数的变量定义特征矩阵大小
- C++ 犰狳和OpenMp:外积求和的并行化 - 定义犰狳矩阵的约简
- 如何在Qt中为矩阵类定义[ ][ ]运算符?
- 在特征源中是为特定矩阵定义的 sum() 函数
- 自定义矩阵和OpenGL着色器。
- C++ - 定义 std::array 类型的二维矩阵
- 使用pybind11将numpy阵列铸造到自定义C 矩阵级
- 当我在Xcode上访问矩阵(openCV垫子)的位置时,为什么我会得到未定义的行为(exc_bad_access(代码=
- 使用未定义它们的构造函数(矩阵(int,int))给出atribute 值
- C++ - 自定义矩阵结构
- C++ 错误:重新定义矩阵类
- 如何在主窗口中定义矩阵.cpp C++
- 铸造自定义矩阵浮动*
- 在OpenCV中使用多个自定义矩阵计算RGB图像矩阵C++
- c++为自定义矩阵类实现迭代器
- 试图将自定义c++矩阵传递给numpy数组
- 使用指针的c++自定义矩阵模板