【发布时间】:2013-11-30 02:54:41
【问题描述】:
我在这里做错了什么?它在我输入count 然后我的数组之后下降
它必须与内存分配有关,但我尝试了很多东西,但没有一个有帮助。感谢回复
struct _arr {
size_t count;
int* arr;
};
typedef struct _arr array_t;
array_t array_create(int* arr, size_t count){
array_t* newArr;
newArr = (array_t*)malloc(sizeof(count)+sizeof(int)*count);
newArr->count = count;
newArr->arr = arr;
return *newArr;
}
array_t array_get(FILE* file){
int* arr = NULL;
size_t count;
array_t arr_t;
int i = 0;
if (!file) return;
if (!fscanf(file, "%u", &count)) return;
arr_t = array_create(arr, count);
for (i = 0; i < arr_t.count; i++){
if (!fscanf(file, "%d", &arr_t.arr[i])) return;
}
for (i = 0; i<arr_t.count; i++)
printf("%d ", arr_t.arr[i]);
printf("\n");
return arr_t;
}
int main(){
array_t arr;
int i = 0;
arr = array_get(stdin);
for (i = 0; i<arr.count; i++)
printf("%d ", arr.arr[i]);
getch();
return 0;
}
【问题讨论】:
-
如果您认为
array_create()(方便地从发布的源代码中省略)在某种程度上微不足道并且与您的问题无关,那么您可能错了。发布它。 -
你的函数有时什么也不返回,你的编译器没有告诉你吗?
-
你有编译器吗??
-
如果你不明白查理说什么,让我为你拼写出来。你的函数被定义为返回一个
array_t。该函数中的任何地方只是return;是未定义的行为。 -
不需要动态分配整个结构。 C 支持结构的按值复制。在您的情况下,唯一不同的是分配的向量的长度。查理答案中的分配器是一种明显更好的方法。此外,如果你要照原样做,那么你的数学是错误的(你不应该这样做,并且泄漏内存,顺便说一句)。数学应该是
sizeof(*newArr) + count*sizeof(int)但这不是解决这个问题的方法。
标签: c struct return recycle-bin