gpt4 book ai didi

c - 在负偏移量处分配带有变量的记录

转载 作者:行者123 更新时间:2023-12-01 13:34:38 24 4
gpt4 key购买 nike

当为指向记录的指针分配内存时,我还需要为位于分配记录之前的整数指针分配空间。这个指针不能是记录本身的一部分,也不能放在记录之后。我目前的做法如下:

#include <stdlib.h>

static int n;
struct { int f; } *p;

p = malloc(sizeof (int *) + sizeof *p);
if (p != NULL) {
p = (void *) ((int **) p + 1);
*((int **) p - 1) = &n;
}

Actor 阵容是否明确?如果没有,我应该怎么做?

编辑:

我想要实现的是实现可扩展记录 (OOP),并且整数指针表示类型 ID。扩展记录应该与其基本类型兼容。但是,我只需要类型 ID:s 作为指向记录的指针。这是一个完整的例子:

#include <assert.h>
#include <stdlib.h>

struct T0 {
int f;
};
int T0ID;

struct T1 {
struct T0 base;
int g;
};
int T1ID;

int main(void)
{
struct T0 *x;
struct T1 *y;

y = malloc(sizeof (int *) + sizeof *y);
if (y != NULL) {
*((int **) y) = &T1ID;
y = (void *) ((int **) y + 1);
((struct T0 *) y)->f = 1;
y->g = 2;
}
x = (struct T0 *) y;
assert(x->f == 1);
return 0;
}

最佳答案

我不确定您的方法是否正确。我尤其担心更改 p 的值。稍后需要释放内存时,您将需要该值。

我会将 int* 和结构一起包装在另一个结构中。像这样的东西:

static int n;
struct someData { int f; };

struct wrapper {int* pn; struct someData data;};

struct someData* pd; // Pointer to the data struct


struct wrapper* pw = malloc(sizeof *pw);

if (pw != NULL) {
pw->pn = &n;
pd = &pw->data;
}

关于c - 在负偏移量处分配带有变量的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44439214/

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