函数malloc中的typedef结构的C动态数组



我再次陷入困境,在理解以下代码示例中发生的事情时遇到了巨大的问题:

//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来实际分配可以在函数外部使用的东西。但我甚至不确定这是否是正确的方法。我今天真的读了很多书,想弄清楚这一点,但没有什么完全适合的,我无法独自填补空白。请帮忙,并提前感谢!:)

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

应该是

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

(为了更容易理解,增加了多余的parens)

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

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

最新更新