段错误访问或设置结构成员
Segfault accessing or setting struct member
我已经有一段时间没有使用指针或 C 语言了。我正在为学校做一个项目(malloc 实现相关),但在初始阶段之后无法取得进展,因为我遇到了段错误问题,并且我知道在调试后哪里出了问题,但我不确定为什么。这是代码:
typedef struct blah bloo;
struct blah {
int c;
bloo *next;
};
int init_func() {
bloo *foo = (bloo*) sbrk(0);
sbrk(10000);
foo->c = 0; //Where the segfault occurs
....
return 9001;
}
对于正确路径的任何帮助或建议,我将不胜感激。提前致谢!
sbrk(0)
你分配了 0 字节的内存。我认为你真正想要的是
bloo *foo = (bloo*) sbrk(sizeof(struct blah));
还要注意 sbrk 的手册页说:
Avoid using brk() and sbrk(): the malloc(3) memory allocation
package is the portable and comfortable way of allocating memory.
希望您的 program/implementation 在不同的架构上表现不同。
包含 sys/types.h 解决了问题。
我已经有一段时间没有使用指针或 C 语言了。我正在为学校做一个项目(malloc 实现相关),但在初始阶段之后无法取得进展,因为我遇到了段错误问题,并且我知道在调试后哪里出了问题,但我不确定为什么。这是代码:
typedef struct blah bloo;
struct blah {
int c;
bloo *next;
};
int init_func() {
bloo *foo = (bloo*) sbrk(0);
sbrk(10000);
foo->c = 0; //Where the segfault occurs
....
return 9001;
}
对于正确路径的任何帮助或建议,我将不胜感激。提前致谢!
sbrk(0)
你分配了 0 字节的内存。我认为你真正想要的是
bloo *foo = (bloo*) sbrk(sizeof(struct blah));
还要注意 sbrk 的手册页说:
Avoid using brk() and sbrk(): the malloc(3) memory allocation
package is the portable and comfortable way of allocating memory.
希望您的 program/implementation 在不同的架构上表现不同。
包含 sys/types.h 解决了问题。