你们能否解释一下我在此所遵循的法典是什么? 我不敢肯定,我是否正确使用过电梯。
With the destructor in there I get:
function1: 23
function2: 8.86183e-317
* glibc detected ./a: double free or corruption (fasttop): 0x000000000111b010 **
If I just comment out the destructor I get:
function1: 23
function2: 24
这是我所希望的。 但是,我不需要花招来避免为更复杂的方案泄露记忆吗?
(因为你可以看到,在点人/一般地点,我可能感到困惑)
感谢!
Edit: oh 是ah,为什么职能1中的额外分配步骤会有所改变?
Edit2:我是否应在构造中将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;
}