我正在使用 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....
}
这是我发现导致错误的代码片段,但我不明白为什么。我尝试根据需要为双倍空间分配内存,但仍然出现错误。当我分配了 100 个元素时,它似乎就足够了......我不再有错误了。ClientThreadArg_t 的 sizeof 建议为 36,循环只运行 1 次。那么,我在为该结构分配内存的方式上做错了什么?