0

我在使用指针时如何分配信息时遇到了麻烦。

我无法在readName函数中分配任何值。你能检查一下我是否正确地分配了结构吗?或者是否有另一种方法可以在不改变打击和功能参数的情况下做到这一点?

typedef struct name
{ 
    char info[];
    int number;
    //some more codes
} name;

typedef struct Data
{
    name ** n;
    //some more codes
} Data;


int readName(FILE *const fp, name **const names)
{
    (*names)->number = 1; // no idea what to put here to store
    strcat ((*names)->info, "aBC");
    //codes
}

int read(FILE *const fp, Data *const data)
{
    data->n = malloc(sizeof(name*)*1);   // am I mallocing correctly?
    data->n[0]=malloc(sizeof(name));
    i = readName(fp, &data->n[Data->n]);
    //codes
}

int main ()
{
    Data * d;
    d = malloc (sizeof (Data));
    i = read(fp, d);  //assume fp is decleared
    //codes that usses the struct
}
4

1 回答 1

0
  data->n = malloc(sizeof(name*)*1);   // am I mallocing correctly?
  data->n[0]=malloc(sizeof(name));

您只为 1 个指针分配了空间,data->n = malloc(sizeof(name*)*1);因此您有1 个指向名称结构的指针。

i = readName(fp, &data->n[filep->ncards]);

但是你做了上面的,你只能做&data->n[0]你不能做的&data->[1]或者更高的下标。如果你想要超过 1 个指向 name 的指针,你必须为指针分配空间,然后使指针指向一些有效的内存。

尝试这个

data->n = malloc((struct name*)how many pointers you want); 
for(int i =0;i<how many pointers you want;i++)
data->n[i] = malloc(sizeof(struct name));

来自你的代码,因为它不完整,我认为 ncards = 你想要多少指针。

int readName(FILE *const fp, name **const names)
try
int readName(FILE *const fp, name ** names)

您将无法通过 const** 指针更改数据,删除 const 并重试

于 2014-02-21T02:53:32.477 回答