C# 数组复制错误:NullReferenceException 异常及解决方法
C# 数组复制错误:NullReferenceException 异常及解决方法
问题描述
在 C# 中,当使用数组复制时,如果目标数组没有为每个子数组分配内存空间,就会引发 NullReferenceException 异常。
示例代码
Console.WriteLine('增加元素');
int[][] array_A = new int[3][] { new int[]{1,2,3 },
new int[]{4,5},
new int[]{6 },};
int[][] array_B = new int[4][];
for (int i = 0; i < array_A.GetLength(0); i++)
{
for (int j = 0; j < array_A[i].Length; j++)
{
array_B[i][j] = array_A[i][j];
}
}
array_A = array_B;
array_A[3][0] = 7;
for (int i = 0; i < array_A.GetLength(0); i++)
{
for (int j = 0; j < array_A[i].Length; j++)
{
Console.Write(array_A[i][j] + " ");
}
Console.WriteLine("");
}
错误分析
上面的代码中,在将 array_A 复制到 array_B 时,没有为 array_B 的每个子数组分配内存空间。因此,在对 array_B 进行赋值操作时会引发 NullReferenceException 异常。
解决方案
为了避免该异常的发生,需要在复制数组之前,为目标数组的每个子数组分配内存空间。
Console.WriteLine('增加元素');
int[][] array_A = new int[3][] { new int[]{1,2,3 },
new int[]{4,5},
new int[]{6 },};
int[][] array_B = new int[4][];
for (int i = 0; i < array_A.GetLength(0); i++)
{
array_B[i] = new int[array_A[i].Length];
for (int j = 0; j < array_A[i].Length; j++)
{
array_B[i][j] = array_A[i][j];
}
}
array_A = array_B;
array_A[3] = new int[] { 7 };
for (int i = 0; i < array_A.GetLength(0); i++)
{
for (int j = 0; j < array_A[i].Length; j++)
{
Console.Write(array_A[i][j] + " ");
}
Console.WriteLine("");
}
解释
在复制 array_A 到 array_B 时,首先为 array_B 的每个子数组分配内存空间,然后再进行赋值操作。另外,在为 array_A 的第四个子数组赋值时,需要先为其分配内存空间。
总结
在使用数组复制时,务必确保目标数组的每个子数组都分配了内存空间,以避免出现 NullReferenceException 异常。
原文地址: https://www.cveoy.top/t/topic/p2PM 著作权归作者所有。请勿转载和采集!