여기 내 코드에서 무슨 일이 일어 났는지 설명 할 수 있습니까? 구조체에서 소멸자를 올바르게 사용하고 있는지 잘 모르겠습니다. 거기에 소멸자와구조체에서 gsl 벡터 할당 해제
내가 얻을 :
기능 1 : 23
기능 2 : 8.86183e-317
*의 glibc가 감지 ./a : 더블 무료 또는 손상 (fasttop) : 0x000000000111b010 * *
내가 얻을 :
기능 1 : 23
기능 2 : 24
내가 원하는거야. 그러나 더 복잡한 프로그램을 위해 메모리 누수를 피하기 위해 소멸자가 필요하지 않습니까?
감사 (당신은 내가 일반적으로 포인터/할당에 약간의 혼동이 될 수 있습니다 볼 수 있듯이)!
편집 : 오 그래, function1의 추가 할당 단계가 다른 이유는 무엇입니까?
편집 2 : 생성자에서 x = 0으로 초기화해야합니까? 나는 그것이 적절하다고 생각했다. 내가 이것을 할 때 초기화 할 때 할당해야 하는가? 그래서 대신 : x = gsl_vector_alloc (1).
#include <iostream>
using namespace std;
#include <cassert>
#include <cmath>
#include <gsl/gsl_vector.h>
struct struct1{
gsl_vector * x;
struct1() {
x = 0;
}
~struct1() {
if (x) gsl_vector_free(x);
}
};
void function1(void *p) {
struct1 s = *(struct1 *) p;
s.x = gsl_vector_alloc(1);
gsl_vector_set(s.x, 0, 24);
}
void function2(void *p) {
struct1 s = *(struct1 *) p;
gsl_vector_set(s.x, 0, 24);
}
int main() {
struct1 s;
s.x = gsl_vector_alloc(1);
gsl_vector_set(s.x, 0, 23);
function1(&s);
cout << "function1: " << gsl_vector_get(s.x, 0) << endl;
function2(&s);
cout << "function2: " << gsl_vector_get(s.x, 0) << endl;
return 0;
}
왜 '무효 *'를 사용하고 있습니까? –