C++ 将矩阵复制到c+中指针指向的位置+;

C++ 将矩阵复制到c+中指针指向的位置+;,c++,C++,如何将矩阵复制到指针指向的位置 我是C++新手。我试了很多,但找不到任何解决办法 这是我的密码: float *output = new float[HighRange]; output = new float[10 * 10]; for(int i=0; i<10; i++){ for(int j=0; j<10; j++){ output[j]=input[i][j]; ---> I have error in this line flo

如何将矩阵复制到指针指向的位置

我是C++新手。我试了很多,但找不到任何解决办法

这是我的密码:

float *output = new float[HighRange];
output = new float[10 * 10];    

for(int i=0; i<10; i++){
    for(int j=0; j<10; j++){
        output[j]=input[i][j]; ---> I have error in this line
float*输出=新的浮点[高量程];
输出=新浮点数[10*10];

对于(int i=0;i有几种方法可以在
output
中排列
input
的元素。以下是一种方法:

output[i*10 + j] = input[i][j]

除了NPEs的建议外,这里还有内存泄漏:

float *output = new float[HighRange]; // allocate contiguous block HighRange * sizeof(float) bytes
output = new float[10 * 10]; // allocate contiguous block 100 * sizeof(float) bytes
除了这是不必要的之外,您还泄漏了内存,即在第一条语句中分配了存储,在将新值分配给指针(该指针将第一个地址保存到以前分配的存储之前,您从未释放过该存储)

使用
new
动态分配内存时,需要确保
相应地删除它。对于数组,需要执行以下操作:

float *output = new float[HighRange]; // allocate 
delete [] output; // deallocate, note the delete[] operator
output = new float[10 * 10]; // allocate anew

<强>注:这只是为了显示新的/Dele[]的正确用法。如果你在示例中处理了解除分配,我建议你的代码不会更好。):/P>这是C++。为什么

output
至少不是
std::vector
?第一行假设是您的
输入吗?如果没有,则会出现内存泄漏,因为您正在将
output
设置为2个动态创建的内存块,而没有释放第一个内存块。会出现什么错误?对于
input
output
,都使用a,这样您就可以只执行
output=input
@JerryCoffin:虽然总体上令人满意,但我认为问题远比这更基本。毕竟,如果
input
实际上是一个2D数组,那么所讨论的表达式是合法的。知道编译器抱怨什么会很有帮助…@chris:因为它的大小是constant@NPE:如果矩阵(输出)中的行和列的大小不相等,那么它将是什么?@ati:那么它将是[i*height+j],其中我在[0,height-1]中,j在[0,width-1]中。谢谢您的帮助。我将应用您的意见,然后返回给您:)@ati:请注意,我的回答不可能解决您的问题。它只是解决了一个你不知道的问题。