我见过这个问题/错误很多,但我就是搞不清是什么问题。我创建了一个包含一些关于线程的信息的结构,基本上我想分配一些值(线程号,当前线程.每次我创建一个线程。线程与此错误无关。到目前为止,我只是试图使我的结构工作,但我一直收到一个错误,因为我将指针延迟到不完整类型的
thread->num=num;
是内存分配错误吗?或者有线索吗?这是我的代码:
C //没有给我任何错误
struct sPRIME_THREAD *new_thread = create_thread(1,0,0,20);
printf("Thread Info:\n");
print_info(new_thread);header.h
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
/* Macro definitions */
#define MAX_THREADS 5 // Maximum number of prime search threads
/* Data types */
typedef struct // Prime search thread data
{
unsigned int num; // Prime search thread number
unsigned int current; // Number currently evaluating for primality
unsigned int low; // Low end of range to test for primality
unsigned int high; // High end of range to test for primality
} sPRIME_THREAD;
/* Shared global variables */
extern sPRIME_THREAD primeThreadData[MAX_THREADS]; // Prime search thread data
int numThreads; // Number of prime search threads
struct sPRIME_THREAD *create_thread(unsigned int num, unsigned int current,
unsigned int low, unsigned int high)
{
struct sPRIME_THREAD *thread = (sPRIME_THREAD *)malloc(sizeof(sPRIME_THREAD));
thread->num = num;
thread->current = current;
thread->low = low;
thread->high = high;
return thread;
}
void destroy_thread(struct sPRIME_THREAD *thread)
{
free(thread);
}
void print_info(struct sPRIME_THREAD *thread)
{
printf("Num: %d\n", thread->num);
printf("Current: %d\n", thread->current);
printf("Low: %d\n", thread->low);
printf("High: %d\n", thread->high);
}发布于 2016-03-23 06:17:06
struct sPRIME_THREAD是未定义的。通过执行typedef struct {...} sPRIME_THREAD;,您只需将匿名struct定义为sPRIME_THREAD类型。
若要修复此下拉列表,请使用ty胡枝子f
typedef struct
{
unsigned int num;
unsigned int current;
unsigned int low;
unsigned int high;
} sPRIME_THREAD;定义struct类型
struct sPRIME_THREAD
{
unsigned int num;
unsigned int current;
unsigned int low;
unsigned int high;
};在引用类型时始终使用struct sPRIME_THREAD。
发布于 2016-03-23 06:05:15
如果您使用的是struct关键字,则无需使用typedef关键字。参考胡枝子f
看看这个
/* Data types */
typedef struct // Prime search thread data
{
unsigned int num; // Prime search thread number
unsigned int current; // Number currently evaluating for primality
unsigned int low; // Low end of range to test for primality
unsigned int high; // High end of range to test for primality
} sPRIME_THREAD;
/* Shared global variables */
extern sPRIME_THREAD primeThreadData[MAX_THREADS]; // Prime search thread data
int numThreads; // Number of prime search threads
sPRIME_THREAD *create_thread(unsigned int num, unsigned int current,
unsigned int low, unsigned int high)
{
sPRIME_THREAD *thread = (sPRIME_THREAD *)malloc(sizeof(sPRIME_THREAD));
thread->num = num;
thread->current = current;
thread->low = low;
thread->high = high;
return thread;
}
void destroy_thread(sPRIME_THREAD *thread)
{
free(thread);
}
void print_info(sPRIME_THREAD *thread)
{
printf("Num: %d\n", thread->num);
printf("Current: %d\n", thread->current);
printf("Low: %d\n", thread->low);
printf("High: %d\n", thread->high);
}https://stackoverflow.com/questions/36170799
复制相似问题