首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:将指针延迟到不完整类型

错误:将指针延迟到不完整类型
EN

Stack Overflow用户
提问于 2016-03-23 05:56:59
回答 2查看 153关注 0票数 1

我见过这个问题/错误很多,但我就是搞不清是什么问题。我创建了一个包含一些关于线程的信息的结构,基本上我想分配一些值(线程号,当前线程.每次我创建一个线程。线程与此错误无关。到目前为止,我只是试图使我的结构工作,但我一直收到一个错误,因为我将指针延迟到不完整类型的

thread->num=num;

是内存分配错误吗?或者有线索吗?这是我的代码:

C //没有给我任何错误

代码语言:javascript
复制
struct sPRIME_THREAD *new_thread = create_thread(1,0,0,20);
printf("Thread Info:\n");
print_info(new_thread);

header.h

代码语言:javascript
复制
#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); 
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-23 06:17:06

struct sPRIME_THREAD是未定义的。通过执行typedef struct {...} sPRIME_THREAD;,您只需将匿名struct定义为sPRIME_THREAD类型。

若要修复此下拉列表,请使用ty胡枝子f

代码语言:javascript
复制
typedef struct              
{
  unsigned int num;       
  unsigned int current;  
  unsigned int low;       
  unsigned int high;     
} sPRIME_THREAD;

定义struct类型

代码语言:javascript
复制
struct sPRIME_THREAD             
{
  unsigned int num;      
  unsigned int current;  
  unsigned int low;       
  unsigned int high;     
};

在引用类型时始终使用struct sPRIME_THREAD

票数 0
EN

Stack Overflow用户

发布于 2016-03-23 06:05:15

如果您使用的是struct关键字,则无需使用typedef关键字。参考胡枝子f

看看这个

代码语言:javascript
复制
/* 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);
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36170799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档