C - 带有函数内 malloc 的 typedef 结构的动态数组
C - dynamic array of typedef struct with in-function malloc
我再次陷入困境,在理解以下代码示例中发生的事情时遇到了很大的问题:
//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 分配,但仅作为一个元素 "array",至少我是这么认为的。它对一个 运行 总是很好用,但是每当我尝试在另一个索引(例如 feld[1].Name
上写入时,它会使程序崩溃,因为显然没有分配 space。保持如图结构如何解决?
很难弄清楚如何在函数内部使用 malloc 来实际分配可以在函数外部使用的东西。但我什至不确定这是否是正确的方法。我今天真的读了很多书想弄明白,但没有什么是完全适合的,我无法靠自己填补空白。请帮助,并在此先感谢! :)
strcpy(feld[i] ->Name, Name);
feld[i]->Score = Score;
应该是
strcpy( ( (*feld)[i] ).Name, Name);
( (*feld)[i] ).Score = Score;
(为便于理解添加了冗余括号)
很简单:feld
不是 指向堆数组的指针,但您正在像使用它一样使用它。它实际上是一个指向堆数组的指针。所以,你基本上是在迭代错误的东西。
在我上面的示例中,您首先 取消引用 feld
,即获取指向您分配的数组的指针。
我再次陷入困境,在理解以下代码示例中发生的事情时遇到了很大的问题:
//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 分配,但仅作为一个元素 "array",至少我是这么认为的。它对一个 运行 总是很好用,但是每当我尝试在另一个索引(例如 feld[1].Name
上写入时,它会使程序崩溃,因为显然没有分配 space。保持如图结构如何解决?
很难弄清楚如何在函数内部使用 malloc 来实际分配可以在函数外部使用的东西。但我什至不确定这是否是正确的方法。我今天真的读了很多书想弄明白,但没有什么是完全适合的,我无法靠自己填补空白。请帮助,并在此先感谢! :)
strcpy(feld[i] ->Name, Name);
feld[i]->Score = Score;
应该是
strcpy( ( (*feld)[i] ).Name, Name);
( (*feld)[i] ).Score = Score;
(为便于理解添加了冗余括号)
很简单:feld
不是 指向堆数组的指针,但您正在像使用它一样使用它。它实际上是一个指向堆数组的指针。所以,你基本上是在迭代错误的东西。
在我上面的示例中,您首先 取消引用 feld
,即获取指向您分配的数组的指针。