[英]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.