IntARRAY& AddIntArray(const IntARRAY &a1,const IntARRAY &a2){
IntARRAY *a3 = new IntARRAY;
a3->len = min(a1.len,a2.len);
for(int i=0; i<a3->len; i++)
*(a3->data+i) = *(a1.data+i)+*(a2.data+i);
return *a3;
}
자꾸 이함수 돌떄 에러가 터지는데 .. 컴파일은 문제없이 되는데 모가 문제일까요..
자바처럼 쓰려고 IntARRAY를 만들어서 쓰는거 같은데 일단 IntArray 정의도 같이 올리는게 맞는거 같지 않냐?
typedef struct{ int len; int *data; }IntARRAY;
제생각에는 *(a3->data+i) = *(a1.data+i)+*(a2.data+i); return *a3; } 이쪽을 제가 잘못했나 하는데.. 혹시 문제 있나요?
len만 대입했지 data는 여전히 uninitialized잖아 어디를 가리킬지 모르는 포인터가 가리키는 곳에 데이터를 막 쓴거임
레퍼런스 쓴거 보면 C++인것 같은데 C++을 자바스럽게 쓰지 말고 그냥 C++을 써라
감사합니다 포인터쪽 좀 더 들여다보고 소스 수정해볼게요
자바를 아직 안배워서 자바처럼쓰는게 뭔지 잘 모르겠는데..과제를 저렇게 내서..
포인터 공부하는거 아니고 직접 쓰려고 만드는 거라면 차라리 vector를 쓰는게 더 나을겨 기본적인 아이디어는 IntArray랑 비슷함
a3->data가 a1.data를 가리키게 일단 한다음에(일단아무거나) 돌리니까 값은 출력이 잘 되는데 에러가나네요.ㅜㅜ
int *newarray = new int[minlen]; for(int i=0; i<minlen; i++){ newarray[i]= *(a1.data+i)+ *(a2.data+i); } a3->data = newarray;
배열을 동적으로 할당해서 거기에 a1,a2의 합을 기록하고 그 데이터를 a3->data가 가리키게 했는데 역시 출력은 잘 되고 에러가 ㅠㅠ
dbgheap.c Expression : _BLOCK_TYPE_IS_VALID(pHead->nBLOCKUse)
아아니다 그건 메인함수에서 프리를 잘못 시켜서 그렇구나!! 동작한다 ㅎㅎ
함수에서 선언한 동적할당은 메인함수에서 .. 프리시키긴 해야겠는데 방법을 모르겐네여
C++ 기본 이디엄인 RAII 를 참고
RAII 검색해봤는데 관련 정보가 너무 없네요 ㅠㅠ