简单分配中的分段错误(核心转储)

dhe*_*ein 2 c malloc freebsd typedef

我正在使用c并在freeBSD系统上编写此代码.

///// defines /////

#define CPUCORES                2
#define THREADAMOUNT            CPUCORES - 1
#define nullptr                 NULL

///// typedefs /////

typedef enum BOOL_e
{
    e_FALSE = 0,
    e_TRUE = 1
}BOOL_t;

typedef struct NewClient_s
{
int sdNewClient;
struct sockaddr sdinClientIp;
socklen_t sdlenIPsize;
}NewClient_t;

typedef struct ClientThreadArg_s
{
    int iInternID;
    NewClient_t sIncommingClient;
    BOOL_t bHasKillSig;
    BOOL_t bIsShutdown;
}ClientThreadArg_t;

//------------------------------------ imagin this is the main

    ClientThreadArg_t *spListOfArguments;
    size_t sizeIndexI;
    spListOfArguments = (ClientThreadArg_t *) malloc (THREADAMOUNT * sizeof     (ClientThreadArg_t));   



for (sizeIndexI = 0; sizeIndexI < THREADAMOUNT; sizeIndexI++)
{   
    spListOfArguments[sizeIndexI].bHasKillSig = e_TRUE;//Heres the error....
}
Run Code Online (Sandbox Code Playgroud)

这是我想出的代码片段负责错误,但我不明白为什么.我尝试根据需要为双空格分配mem,但我仍然遇到错误.因为我分配了100个元素,它似乎已经足够......我没有再出现错误了.ClientThreadArg_t的大小与建议的36一样,循环只运行1次.那么,我在为该结构分配内存的方式上做错了什么?

Ric*_*ung 8

很难说我什么时候无法运行你的代码,但从它的外观来看,它可能就在这里

 spListOfArguments = malloc (THREADAMOUNT * sizeof(ClientThreadArg_t)); 
Run Code Online (Sandbox Code Playgroud)

注意,THREADAMOUNT被定义为CPUCORES - 1这是2 - 1

这意味着你会得到什么

 spListOfArguments = malloc (2 - 1 * sizeof(ClientThreadArg_t)); 
Run Code Online (Sandbox Code Playgroud)

因此,您将使用返回null的负数进行mallocing