我试图计算不是n x n的矩阵的转置。
问题是我必须为要添加的每个元素分配新的内存,而不必删除** array。
代码就是这样。
//初始化二维数组。
array = new int*[row];
for (int i=0; i<row; i++){
arr[i] = new int[col]();
}
现在我只考虑一种情况,假设我的矩阵是3 * 4。矩阵的转置具有暗淡4 * 3。
我执行以下代码,但它显示“SEGMENTATION FAULT”。我的想法是我为元素分配新的内存,该内存将因转置而添加。
代码是:
int r=col;
int c=row;
if (col<c){
arr = new int*[row];
for (int i=col; i<=c; i++){
arr[i] = new int[col](); // trying to allocate New Memory to elem.
}
它给这里错误。
任何帮助。另外,如果还有其他方法可以解决此问题,请提出建议。
最佳答案
在第二个代码示例中,您将覆盖数组限制。 arr
是row
元素,长为0
到row - 1
。在for循环中,索引i
从col
变为c
,等效于row
和数组之外的一个元素。正确的代码将是<
而不是<=
for (int i=col; i < c; i++){
arr[i] = new int[col](); // trying to allocate New Memory to elem.
}
除此之外,我可能建议您查看Wikipedia: Transpose,因为在第二种情况下,您可以使用第一个代码示例,仅需对row和col进行切换。
关于c++ - 转置期间的动态内存分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13647804/