将结构发送到先前使用指针定义的函数

时间:2010-09-15 03:12:52

标签: c pointers data-structures

编辑:忘了。它是代码的另一部分(实际上问题是次要元素。另一个指针但没有用malloc分配,只是声明,所以我认为内存是在另一个地方分配的)。这个例子现在可以编译了。

谢谢你们。对不起我的错别字,但英语不是我的母语(不是一个很好的借口,但我会更加努力)。


喜。我想将一些元素(在结构中)传递给函数,但我无法以任何方式读取元素(seg fault)

#define _FILE_OFFSET_BITS 64
#define _LARGEFILE_SOURCE
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>   
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include "pcre.h"
#include <arpa/inet.h>
#define BUFFER 1512


typedef struct OCR {
    unsigned long int       ocr;
    struct OCR *         prev;
    struct OCR *         next;
} ip_ocr;


int sending (ip_ocr * tmp) {
    printf("%p\n",tmp); //this outpuut
    printf("%lu",tmp->ocr); // at this point i get a seg fault
    return 0;

}

int main () {
    ip_ocr * list;
    list=malloc(sizeof(ip_ocr));
    list->ocr=1;
    list->next=NULL;
    list->prev=NULL;

    sending(list);


 }    

3 个答案:

答案 0 :(得分:3)

经过一些修复后,它在我的机器上运行。

包含系统标题:

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

在这些行之后添加分号:

printf("%lu",tmp->ocr);
return 0;

向malloc:

返回的值添加(不必要的)类型转换
list=(ip_ocr*)malloc(sizeof(ip_ocr)); /* oops, not needed */

答案 1 :(得分:1)

我认为您必须忽略警告,malloc的返回已被视为int。那么你的list就完全错了。

  • 包含正确的头文件
  • 始终使用-Wall或 等效
  • 改进您的代码,直到它没有 吐出任何警告

答案 2 :(得分:0)

使用-Werror-implicit-function-declaration-Werror=return-type进行编译可以防止在C中发生这类事情。