C - 具有函数malloc的typedef结构的动态数组

时间:2015-02-16 13:55:06

标签: c arrays pointers malloc typedef

我再次陷入困境,并且在以下代码示例中了解了最新的问题:

//Filename main.c

    #include<stdio.h>
    #include "entries.h"

    int main(){

        playerEntry *Entry;

        printf("Number of Entries: %d",readPlayerList(&Entry));

        return 0;
    }

它只是调用函数并打印出结果,并且应该能够处理* Entry中的函数所做的条目(到那时应该是一个数组)

//Filename entries.h
#ifndef ENTRIES_H_
#define ENTRIES_H_

typedef struct {
    char Name[25];
    int Score;
}playerEntry;


int readPlayerList(playerEntry* *feld);


#endif /* ENTRIES_H_ */

现在这里是typedef和函数原型,保持非常简单和直接,因为它只是(对于我;()未知问题产生崩溃的样本

//Filename readPlayerList.c
    #include<string.h>
    #include<stdlib.h>
    #include "entries.h"

    int readPlayerList(playerEntry* *feld) {

        int i = 0, Score = 5001;
        char Name[25] = "Rasputin";

        *feld = malloc(4 * sizeof(playerEntry));

        for(i= 0; i < 3; i++){
            strcpy(feld[i] ->Name, Name);
            feld[i]->Score = Score;
        }

        return i;
    }

这就是垃圾发生的地方。

我甚至不知道怎么称呼它! :(

我的结构由malloc分配,但只作为一个选中的“数组”,至少这就是我的想法。它总是适用于一次运行,但每当我尝试写另一个索引如feld[1].Name时,它会崩溃程序,因为显然没有分配空间。如何通过保持结构如图所示来解决它?

很难弄清楚如何在函数内部使用malloc来实际分配可以在函数外部使用的东西。但我甚至不确定这是否是正确的方法。我今天真的读过很多东西以便以某种方式解决它,但是那里没有任何东西完全适合那里,我不能自己填补空白。请帮助,并提前感谢! :)

1 个答案:

答案 0 :(得分:1)

strcpy(feld[i] ->Name, Name);
feld[i]->Score = Score;

应该是

strcpy( ( (*feld)[i] ).Name, Name);
( (*feld)[i] ).Score = Score;

(为了便于理解而添加了冗余的parens)

很简单:feld不是指向堆数组的指针,但您可以像使用它一样使用它。它实际上是指向堆数组指针的指针。所以,你基本上是在做错事。

在上面的示例中,您首先取消引用 feld,即获取指向已分配数组的指针。