0

好的,所以我确定我缺少一个简单的修复程序,但是现在我的代码导致“A[i]->key = 0;”行出现段错误。Record* Item 部分对于程序来说是必需的,所以我需要让它为我正在处理的作业以这种方式工作,但是如果我确实更改它以使 Item 成为 Record 的非指针 typedef,那么我可以使用 A[i].key 没问题。我只需要朝正确的方向轻推,以便让standInput 正确地将值分配给指向记录的指针数组。谢谢!

项目.h:

#include "stdio.h"
#include "stdlib.h"

typedef int keyType;

struct Record
{
    keyType key;
    int other;
};
typedef struct Record* Item;

void standInput(Item *A, int n)
{
    int i, input;
    for(i = 0; i <= n-1; i++)
    {
        A[i]->key = 0;
        printf("%d ", A[i]->key);
    }
}

主要的:

#include "stdio.h"
#include "stdlib.h"
#include "Item.h"

int main()
{
    int n;
    Item *A;
    printf("Enter a length for the array: ");
    scanf("%d", &n);
    A = (Item*)malloc(n * sizeof(Item));
    standInput(A, n);
    return 0;
}
4

4 回答 4

2

请注意,这Item已经是一个指针!

您必须为结构分配空间,而不是为指针分配空间:

A = (Item)malloc(n * sizeof(struct Record));

注意:如果指针的 typedef 让您感到困惑,请不要使用它;)

A[i]->key意味着这A[i]是一个指针,但你刚刚分配了一个数组,所以使用A[i].key.

注意:您必须相应地更改 A 的类型。

第二种解决方案:如果您希望 A[i] 成为指针,则必须首先为指针分配空间(就像现在一样),然后为每个指针(在循环中)为结构分配空间。

于 2012-04-22T22:30:18.793 回答
2

中的值A都未初始化,但无论如何您都将它们用作struct Record指针。如果您想A继续持有指针(而不是直接持有结构),那么您需要为A 指向的每个项目分配空间A

于 2012-04-22T22:32:19.327 回答
0

您的结构名称Record不是Item. 所以你应该使用sizeof(struct Record).

于 2012-04-22T22:32:10.253 回答
0

这样做:

int main()
{
    int n, i;
    Item *A;
    printf("Enter a length for the array: ");
    scanf("%d", &n);
    A = (Item*)malloc(n * sizeof(Item));
    for(i=0; i<n; i++){
        A[i] = (Item)malloc(sizeof(struct Record));
    }
    standInput(A, n);
    return 0;
}
于 2012-04-22T23:00:29.217 回答