编辑:忘了。它是代码的另一部分(实际上问题是次要元素。另一个指针但没有用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);
}
答案 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中发生这类事情。