Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将结构发送到以前使用指针定义的函数_C_Pointers_Data Structures - Fatal编程技术网

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

C 将结构发送到以前使用指针定义的函数,c,pointers,data-structures,C,Pointers,Data Structures,编辑:算了吧。这是代码的另一部分(实际上问题是第二个元素。另一个指针,但没有分配malloc,只是声明了,所以我认为内存分配到了另一个地方)。这个例子现在可以编译了 谢谢各位。很抱歉我的拼写错误,但英语不是我的母语(虽然不是一门好的英语,但我会更加努力) 嗨。我想将某些元素(在结构中)传递给函数,但我无法以任何方式读取这些元素(seg错误) 定义文件偏移量64位 #定义_大文件_源 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括“pcre.h” #包括 #定义缓冲区1512 类

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

谢谢各位。很抱歉我的拼写错误,但英语不是我的母语(虽然不是一门好的英语,但我会更加努力)


嗨。我想将某些元素(在结构中)传递给函数,但我无法以任何方式读取这些元素(seg错误)

定义文件偏移量64位
#定义_大文件_源
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括“pcre.h”
#包括
#定义缓冲区1512
类型定义结构OCR{
无符号长整数ocr;
结构OCR*prev;
结构OCR*下一步;
}ip_ocr;
int发送(ip_ocr*tmp){
printf(“%p\n”,tmp);//此输出
printf(“%lu”,tmp->ocr);//此时我得到一个seg故障
返回0;
}
int main(){
ip_ocr*列表;
列表=malloc(sizeof(ip_ocr));
列表->ocr=1;
列表->下一步=空;
list->prev=NULL;
发送(列表);
}    

经过几次修复后,它在我的机器上运行正常

包括系统标题:

#include <stdio.h>
#include <stdlib.h>
向malloc返回的值添加(不必要)类型转换:

list=(ip_ocr*)malloc(sizeof(ip_ocr)); /* oops, not needed */

经过几次修理后,它在我的机器上工作了

包括系统标题:

#include <stdio.h>
#include <stdlib.h>
向malloc返回的值添加(不必要)类型转换:

list=(ip_ocr*)malloc(sizeof(ip_ocr)); /* oops, not needed */

我想您一定忽略了一个警告,
malloc
的返回被认为是
int
。你的
列表
就完全错了

  • 包括正确的头文件
  • 始终使用
    -Wall
    或 等价物
  • 改进你的代码,直到它不起作用 说出任何警告

我认为您一定忽略了一个警告,即
malloc
的返回被视为
int
。你的
列表
就完全错了

  • 包括正确的头文件
  • 始终使用
    -Wall
    或 等价物
  • 改进你的代码,直到它不起作用 说出任何警告


    • 使用
      -Werror隐式函数声明编译
      -Werror=return type
      可以防止此类事情在C中发生。

      使用
      -Werror隐式函数声明编译
      -Werror=return type
      可以防止此类事情在C中发生。

      不能成为您的代码:是这样的缺少几个分号和
      #include
      行。另外,尝试添加类似于printf的内容(“tmp:%p\n”,tmp);在发送
      的开始:我想你可能因为某种原因得到了一个
      NULL`指针。当我编译你的代码时(在修复include和语法错误之后),我没有得到segfault。刚才他们把虚拟服务器拔掉了。但是我检查了指针,它不是空的。我会重新检查我的代码(我刚刚在这里发布了它的关键部分),当他们再次开机时,我会再次检查;这使得其他人很难确定实际代码中有哪些错误,以及通过重新键入代码引入了哪些错误。但是,如果您必须解释,您应该发布能够重现问题的最小示例。谢谢,但实际代码有几行。再次感谢:数据不可能是您的代码:它缺少几个分号和
      #include
      行。另外,尝试添加类似于printf的内容(“tmp:%p\n”,tmp);在发送
      的开始:我想你可能因为某种原因得到了一个
      NULL`指针。当我编译你的代码时(在修复include和语法错误之后),我没有得到segfault。刚才他们把虚拟服务器拔掉了。但是我检查了指针,它不是空的。我会重新检查我的代码(我刚刚在这里发布了它的关键部分),当他们再次开机时,我会再次检查;这使得其他人很难确定实际代码中有哪些错误,以及通过重新键入代码引入了哪些错误。但是,如果您必须解释,您应该发布能够重现问题的最小示例。谢谢,但实际代码有几行。再次感谢:DC不需要类型转换。Matthew是正确的,不需要malloc返回值的类型转换。从习惯中,我用C++添加了它,不仅不需要它,而且混淆了OP遇到的错误。由于他没有包含标题,返回类型被解释为
      int
      。因此,最终以
      列表
      结尾的指针完全偏离了轨道。我认为现在的每一个编译器都给出了一个警告,关于那些必须被OP慷慨忽略的东西。C不需要类型转换。Matthew是正确的,malloc返回值的类型转换是不需要的。从习惯中,我用C++添加了它,不仅不需要它,而且混淆了OP遇到的错误。由于他没有包含标题,返回类型被解释为
      int
      。因此,最终以
      列表
      结尾的指针完全偏离了轨道。我认为现在的每一个编译器都给出了一个警告,这肯定是OP慷慨忽略的。我们必须得出结论,代码被编译为LP64,因为,如果它被编译为32位代码,意外地将指针视为int不会出现seg错误(在我使用过的所有实际C实现中)。@JeremyP:是的,这也是我的猜测。我们也可能会得出这样的结论,我们会越来越频繁地看到这种错误。事实上,它是在X86_64中编译的,并且使用bigfiles支持和malloc不会给我任何警告(我总是使用-Wall进行编译),我们必须得出这样的结论:代码被编译为LP64,因为,如果它被编译为32位代码,意外地将指针视为int不会导致seg错误(在我使用过的所有实际C实现中)。@JeremyP