所以,我给出了一些如何使用动态分配的2d数组的示例,并且即将发送基本上如下的代码:
public override IEnumerable<IColumnInformation> GetTableColumnList(ITableInformation table)
{
var result = new List<IColumnInformation>();
// if the table is flagged as excluded bail with empty list
if (table.Exclude)
{
return result;
}
var strb = new OracleClient.OracleConnectionStringBuilder(this.ConnectionString);
DataTable columns;
using (var connection = new OracleClient.OracleConnection(ConnectionString))
{
// Connect to the database then retrieve the schema information.
connection.Open();
columns = connection.GetSchema("Columns");
if (columns != null && columns.Rows.Count > 0)
{
columns.AsEnumerable().ToList()
.ForEach(t => result.Add(new ColumnInformation(
t.Field<string>("COLUMN_NAME"),
t.IsNull("LENGTH") ? 0 : t.Field<int>("LENGTH"),
null,
t.Field<string>("OWNER"),
false,
table)));
}
}
return result;
}
public ColumnInformation(string name, int length, Type type, string databaseType, bool exclude = false, ITableInformation parent = null)
{
this.Name = name;
this.Length = length;
this.Type = type;
this.DbType = databaseType;
this.Exclude = exclude;
this.Parent = parent;
}
这给了我一个重定义错误,但我认为delete []释放了内存中的空间(因此'arr')。我知道如何解决这个问题(新的数组名称,不要删除[] /重新定义),但我想知道实际发生了什么导致错误?
答案 0 :(得分:7)
您可能想尝试一下:
int size = 5;
int* arr = new int[ size ];
for( int i = 0; i < size; i++ )
arr[ i ] = i;
delete[] arr;
size = 10;
arr = new int[ size ]; //<-- no int* here, we just need to reassign
for( int i = size; i > 0; i-- )
arr[ i ] = i;
delete[] arr;
我们确实要释放内存块,但这并不意味着我们正在删除int * arr。我们刚刚删除了它的内容&#39;
我们删除它后,它只是一个非指定的指针。
答案 1 :(得分:1)
arr
被宣告两次。您可以重复使用它,但不能再次声明它。
size = 10;
int* arr = new int[ size ];