c - 在 C 中的函数之间传递指向结构的指针数组的问题

标签 c

调用 strncpy 时出现段错误的代码,我看不出我做错了什么。我需要另一双眼睛来看待这个。本质上,我试图为结构体指针数组中的元素所指向的结构体分配内存。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_POLICY_NAME_SIZE 64
#define POLICY_FILES_TO_BE_PROCESSED "SPFPolicyFilesReceivedOffline\0"

typedef struct TarPolicyPair
{
  int AppearanceTime;
  char *IndividualFile;
  char *FullPolicyFile;
} PolicyPair;


enum {
    bwlist = 0,
    fzacts,
    atksig,
    rules,
    MaxNumberFileTypes
  };


void SPFCreateIndividualPolicyListing(PolicyPair *IndividualPolicyPairtoCreate )
{
  IndividualPolicyPairtoCreate = (PolicyPair *) malloc(sizeof(PolicyPair));
  IndividualPolicyPairtoCreate->IndividualFile = (char *)malloc((MAX_POLICY_NAME_SIZE * sizeof(char)));
  IndividualPolicyPairtoCreate->FullPolicyFile = (char *)malloc((MAX_POLICY_NAME_SIZE * sizeof(char))); 

  IndividualPolicyPairtoCreate->AppearanceTime = 0;
  memset(IndividualPolicyPairtoCreate->IndividualFile, '\0', (MAX_POLICY_NAME_SIZE * sizeof(char)));
  memset(IndividualPolicyPairtoCreate->FullPolicyFile, '\0', (MAX_POLICY_NAME_SIZE * sizeof(char)));
}

void SPFCreateFullPolicyListing(SPFPolicyPair **CurrentPolicyPair, char *PolicyName, char *PolicyRename)
{              
  int i;

  for(i = 0; i < MaxNumberFileTypes; i++)
    {
      CreateIndividualPolicyListing((CurrentPolicyPair[i]));
      // segfaults on this call
      strncpy((*CurrentPolicyPair)[i].IndividualFile, POLICY_FILES_TO_BE_PROCESSED, (SPF_POLICY_NAME_SIZE * sizeof(char)));

    }
}

int main()
{
  SPFPolicyPair *CurrentPolicyPair[MaxNumberFileTypes] = {NULL, NULL, NULL, NULL};
  int i;

  CreateFullPolicyListing(&CurrentPolicyPair, POLICY_FILES_TO_BE_PROCESSED, POLICY_FILES_TO_BE_PROCESSED);

  return 0;
}

最佳答案

问题出在函数原型(prototype)上:

...
void SPFCreateIndividualPolicyListing(PolicyPair *IndividualPolicyPairtoCreate )
{
...

该函数获取 NULL 指针值,通过 malloc 将其设置为有效位置,但不会以任何方式将其返回给调用函数。 应该是

...
void SPFCreateIndividualPolicyListing(PolicyPair **IndividualPolicyPairtoCreate )
{
*IndividualPolicyPairtoCreate = malloc (...);
...

关于c - 在 C 中的函数之间传递指向结构的指针数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2709323/

相关文章:

c - 如何将 C 库添加到 Microsoft Visual C++ 项目?

c - IO 繁重操作与网络应用程序监听 UDP 和 SCTP 数据之间的问题

c - 如何为 jvm.dll 设置系统范围的环境变量

c - 缓冲区失败测试用例的平均值

c - "STACK"之前的预期表达式错误

c - OS X asl 日志记录 : how to re-direct messages of multi-threaded project into a single file

java - java.library.path 中没有 dhtreader

c - 简单C程序逻辑错误+指针误解

C语言: How to use memset to reset dynamic 2d array?

c - 使用腻子