在类中使用指向结构体的指针
using a pointer to a struct inside a class
我正在使用c++内部的外部C库(libsvm)。我使用
将头文件插入到类头文件中extern "C"{
#include "svm.h"
}
这个库包含一个名为svm_model的结构体。它还包含一个函数,该函数给出一些输入参数,它为结构体svm_model分配(malloc)空间并返回指向该结构体的指针。函数是
svm_model *svm_train(input_parameters)
在我的代码中(在c++中),我在我的类中创建了一个变量,它是一个struct svm_model指针。在头文件中,我输入
class myClass
{
public:
int do_something();
private:
struct svm_model *m_data;
}
里面"do_something()"我已经通过以下方式成功调用了svm_train:
struct svm_model *test = svm_train(input_parameters);
但是每当我想把结果写入m_data时,我得到一个segmentation_fault。
会发生这种情况m_data = svm_train(input_parameters);
也会发生
struct svm_model *test = svm_train(input_parameters);
m_data = test;
事实上,我注意到即使我这样做
printf("hello: %pn", m_data);
它也崩溃了。因此,我怀疑在类中使用指向结构(已在其他地方定义)的指针一定有问题,尽管我没有在任何地方发现任何提示。我尝试在我的类构造函数中初始化它为NULL,但没有改变任何东西。
如果崩溃,只需输入
printf ("hello: %pn", (void*)m_data);
那么问题可能在其他地方和以前。它看起来像当你调用printf
函数this
是无效的(也许是NULL
?)或者你的内存堆是在非常糟糕的形状。
在Linux上,我建议使用最近的编译器(GCC 4.8刚刚发布)编译g++ -Wall -g
。改进代码,直到没有警告。然后使用gdb
和valgrind进行调试。
您可能还想编译带有调试信息和所有警告的libsvm
(或者简单地使用该包的调试变体)。
文件svm.h已经有
extern "C" {
声明。所以不是:
extern "C"{
#include "svm.h"
}
只是做:
#include "svm.h"
也没有必要一次又一次地重复struct关键字。所以不是:
struct svm_model *m_data;
:
svm_model *m_data;
嗯,刚刚发现问题,它确实在其他地方比报道。发生的事情是,我已经创建了myClass的STL向量,并且正在访问该向量的第一个元素上的方法,即使我没有显式地创建它,即:
std::vector<myClass> dummy;
dummy[0].do_something();
考虑到一切都编译正常,我不认为这部分代码会出现问题。
谢谢大家的帮助。
- C++ 使用成员函数返回结构体指针属性的值
- 在使用结构体和用函数填充其变量(使用指针)时遇到问题
- 如何使用结构体作为接口从函数返回指向数组的指针
- 如何在结构体中传递指向CURL的指针到向量
- 使用c++中从IDA导出的带有指针的结构体
- 设置两个结构体相等后,指针为NULL
- 结构体中的指针
- 指向结构体的向量指针错误
- 指向结构体的Void *指针
- 返回指向类定义的结构体的指针,多个作用域操作符
- 带有指针的结构体向量
- 你能解释一下指针和递归结构体吗?
- c语言中具有指针数组的结构体
- c++用数组、结构体和指针排序
- 初始化没有指针的结构体
- 如何在不激怒编译器的情况下传递指向结构体的指针?
- 如何释放一个结构体的内存,每次循环迭代的指针
- 如何根据结构体的字段之一对结构指针列表进行排序?
- 从c#调用c++函数-结构体,指针,函数指针
- 实现了结构体的向量和具有指向结构体指针的映射