memcpy()
을 사용하는 중에 문제가 있습니다. 배열 v
의 값을 oldv
으로 한 번만 복사 한 다음 v
의 값을 변경하고 싶습니다. 코드의 첫 번째 부분에서 memcpy()
을 호출했으나 수행해야 할 작업을 수행했지만 두 번째 부분에서는 배열 v
을 변경 한 다음 v
및 oldv
을 다시 인쇄했습니다 ... 두 번째로 memcpy()
을 호출하지 않고 값 oldv
도 변경되었습니다. 왜 ? 컴파일러에서 새 v
을 oldv
으로 복사 한 후 memcpy()
을 호출하지 않았습니다.memcpy는 두 번째로 호출하지 않고 항상 값을 복사합니까?
#include<iostream>
#include<stdio.h>
#include <cstring>
using namespace std;
int main()
{
double **v,**oldv;
v = new double*[3];
for(unsigned int i=0; i<3; i++)
v[i] = new double[2];
oldv = new double*[3];
for(unsigned int i=0; i<3; i++)
oldv[i] = new double[2];
for(unsigned int i=0; i<3; i++)
{
for(unsigned int j=0; j<2; j++)
v[i][j] = i+j;
}
for(int i = 0; i<3; i++)
{
memcpy(&oldv[i], &v[i], sizeof(v[0]));
}
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
cout << v[i][j] << " ";
cout << endl;
}
cout << "=================== cpytab ================" << endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
cout << oldv[i][j] << " ";
cout << endl;
}
cout << endl;
for(unsigned int i=0; i<3; i++)
{
for(unsigned int j=0; j<2; j++)
v[i][j] = 2*(i+j);
}
cout << "==================value changed=============" << endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
cout << v[i][j] << " ";
cout << endl;
}
cout << "====================cpytableau==============" << endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
cout << oldv[i][j] << " ";
cout << endl;
}
cout << endl;
for(unsigned int j=0;j<2;j++)
delete[] v[j];
delete[] v;
for(unsigned int j=0;j<2;j++)
delete[] oldv[j];
delete[] oldv;
return 0;
}
Thaaanks sir it works ... !! –
다행이었습니다. 나는 당신이 그것을 받아 들일 수 있도록 대답으로 변환했다. :) (문제가 해결 될지 확신 할 수 없으므로 먼저 댓글로 썼습니다.) – leemes