gpt4 book ai didi

c++ - 使用指向类内部结构的指针

转载 作者:行者123 更新时间:2023-11-30 00:36:38 26 4
gpt4 key购买 nike

我正在使用 C++ 中的外部 C 库 (libsvm)。我使用

在我的类头文件中插入头文件
extern "C"{
#include "svm.h"
}

这个库包含一个名为 svm_model 的结构。它还包含一个函数,给定一些输入参数,它为 struct 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: %p\n", m_data);

它也会崩溃。因此,我怀疑在类中使用指向结构(已在其他地方定义)的指针一定存在问题,尽管我在任何地方都没有发现任何提示。我尝试在我的类构造函数中将它初始化为 NULL,但没有改变任何东西。

感谢任何帮助。

最佳答案

如果它简单地崩溃

  printf ("hello: %p\n", (void*)m_data);

那么问题可能出在其他地方和之前。看起来当您调用 printf 函数时 this 无效(可能是 NULL ?)或者您的内存堆状况非常糟糕。

在 Linux 上,我建议使用最新的编译器(GCC 4.8 刚刚发布)使用 g++ -Wall -g 进行编译。改进代码直到没有给出警告。然后使用 gdbvalgrind对其进行更多调试。

您可能还想用调试信息和所有警告编译您的 libsvm(或者简单地说,使用该包的调试变体)。

关于c++ - 使用指向类内部结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15600912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com