【发布时间】:2013-05-25 15:35:57
【问题描述】:
我想在一个名为intarray.c的文件中编写这个程序:
#include <stdio.h>
#include <stdlib.h>
#include "intarray.h"
struct IntArray
{
int length;
int *array;
};
struct IntArray erzeugeArr(int length)
{
struct IntArray erzeugt = {length, (int *)malloc(sizeof(int)*length)};
return erzeugt;
}
这个在测试主目录中:
struct IntArray *string;
string = &(erzeugeArr(5));
现在,我得到的是:
误用未定义类型“struct IntArray”
因为string = … 的最后一位。查了很多,还是没看懂问题!如果我这样做:
void erzeugeArr(struct IntArray *erzeuge, int length)
{
struct IntArray erzeugt = {length, (int *)malloc(sizeof(int)*length)};
erzeuge = &erzeugt;
}
和
struct IntArray *string;
erzeugeArr(string, 5);
,然后我可以编译我的程序,但是在启动它时,我得到一个分段错误,我假设我得到了,因为 main 无法访问erzeugt?
【问题讨论】:
-
请提供short, self contained, correct example。据我所知,原因可能很简单,因为忘记包含标题。但是当我看不到您实际尝试编译的内容时,这很难说。
-
你为什么不使用普通数组而不是敲击数组?
-
在这两种情况下,您都是从函数返回局部变量。是时候了解一下 C 中的变量范围了。
标签: c struct segmentation-fault malloc modularization