繁体   English   中英

c函数返回指向结构的指针

[英]c function returning a pointer to a struct

我正在尝试创建一个函数,该函数返回指向结构的指针,代码如下:

结构:

struct Nia{
    char NIA[6];
};

功能:

struct Nia * prueba(){
   struct Nia *nia = malloc(sizeof(struct Nia)*2);
   strcpy(nia[0].NIA,"11111\0");
   strcpy(nia[1].NIA,"11112\0");
   return nia;
 }

主要功能:(它不打印任何东西,但它应该打印 11111)

int main(int argc, char** argv) {

   struct Nia *nia = prueba();

   printf("%s\n",nia[0].NIA);

return (EXIT_SUCCESS);

}

问题出在哪儿? 我想我正在正确地实现指向结构的指针,不是吗?

它实际上返回一个分段错误。

提前致谢!

我使用gcc -o test test.c -Wall在 Linux Mint 64 位上编译并运行了以下 test.c 文件

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

struct Nia{
    char NIA[6];
};

struct Nia * prueba(){
   struct Nia *nia = malloc(sizeof(struct Nia)*2);
   strcpy(nia[0].NIA,"11111\0");
   strcpy(nia[1].NIA,"11112\0");
   return nia;
 }

 int main(int argc, char** argv) {

   struct Nia *nia = prueba();

   printf("%s\n",nia[0].NIA);

return (EXIT_SUCCESS);

}

它输出11111 ,并且编译没有抱怨。 老实说,即使我省略了include d 标头,它也会运行,但会发出警告,但您的系统可能会有所不同,因此只需包含它们,您应该没问题。

当然,再考虑一下这个问题,如果您使用的是C++而不是C ,这可能会出现问题,因为C++不是同一种语言 你看, g++会在你分配malloc()返回到Nia*类型的符号的void*值时遇到问题,而gcc很乐意为你进行转换。 您可能正在使用的不同 C++ 编译器可能允许您编译它,但void没有成员,因此NIA成员可能尚未初始化,这会导致在您尝试打印时出现段错误。 为了绝对确定,请使用调试器并找出发生内存访问冲突的位置。

更新:刚刚在同一系统上的 Netbeans 中运行它,一切顺利。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM