gpt4 book ai didi

c++ - 结构创建问题

转载 作者:搜寻专家 更新时间:2023-10-31 02:18:47 25 4
gpt4 key购买 nike

我有一个这样声明的结构:

struct sExample {
int something;
char somethingElse[32];
bool another;
// many other fields
};

它有更多的intchar[]bool。现在让我们面对这个问题。首先,我创建了一个类,它使用 sExample 类型的临时变量。

class ExClass {
void fun() {
sExample myStruct;
// Initialize some of the struct fields (just some of them!)
strcpy(myStruct.somethingElse, "TEXT");
// Use struct in function that may read or modify it
globalFunction(&myStruct);
}
}

它工作得很好,但后来我决定 myStruct 应该比只在 function fun 中可用更长的时间,所以我将它移到了类成员中:

class ExClass {
sExample myStruct;
void fun() {
// Same code as above
// Initialize some of the struct fields (just some of them!)
strcpy(myStruct.somethingElse, "TEXT");
// Use struct in function that may read or modify it
globalFunction(&myStruct);
}
}

这就是问题所在。调用 globalFunction 会导致段错误(这是来自外部第 3 方库的函数,因此我无法确定问题的确切位置)。我也尝试使用 = {0} 初始化结构,但没有帮助。有什么问题?我正在使用 Gcc 4.9,C++11。任何人都可以解释这里的问题是什么?

最佳答案

如果这是您唯一的更改,那么您的问题是您在 ExClass 的无效实例上调用了 fun()。或者您忘记了新建类,或者它已经被删除/超出范围。

这个Ideone示例完美运行,因为 A a 是在 fun() 中的堆栈上创建的。但是一旦你将 a 的声明移动到类级别,你将得到一个异常,因为 *b 没有被实例化。

#include <iostream>
using namespace std;

struct A {
int data;
A() : data(123) { }
};

class B {
public:
void fun() {
A a;
cout << a.data;
}
};

int main() {
B* b; // b points to random memory, thus is an invalid instance
b->fun(); // this still works because fun doesn't access any member of B
return 0;
}

关于c++ - 结构创建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185408/

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