我做错了什么?它在我输入 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;
}
最佳答案
WhozCraig 的 Crystal 球说您的问题在 array_create()
中.具体来说,字段 arr
分配不当。你的array_create()
应该看起来像这样:
array_t array_create(int length)
{
array_t res = {length, NULL};
if (length > 0) {
res.arr = malloc(length * sizeof(*res.arr));
if(res.arr == NULL) {
printf("malloc(%d) failed\n", length * sizeof(*res.arr));
exit(1);
}
}
return res;
}
您还需要修复那些空的返回。也许您只想打印一条消息并退出。
更新 2013 年 11 月 18 日星期一 16:13:48 CST
这是一个完全不同的版本,它从堆中分配一个 array_t。错误处理有点难看(所有返回 0 的地方;)。这应该有效,另一个也有效,但也许堆上的 array_t 就是您正在寻找的。p>
#include <stdio.h>
#include <stdlib.h>
typedef struct {
size_t count;
int *arr;
} array_t;
array_t *array_create(size_t count){
array_t *newArr = malloc(sizeof(array_t));
if(newArr == 0) return 0;
newArr->count = count;
newArr->arr = calloc(sizeof(int),count);
if(newArr->arr == 0) return 0;
return newArr;
}
array_t *array_get(FILE* file){
size_t count;
array_t *arr;
int i = 0;
if (!file) return 0;
if (!fscanf(file, "%zu", &count)) return 0;
arr = array_create(count);
if(arr == 0) return 0;
for (i = 0; i < arr->count; i++){
if (!fscanf(file, "%d", &arr->arr[i])) return 0;
}
for (i = 0; i<arr->count; i++)
printf("%d ", arr->arr[i]);
printf("\n");
return arr;
}
int main(void) {
array_t *arr;
int i = 0;
arr = array_get(stdin);
if(arr == 0) return -1;
for (i = 0; i<arr->count; i++)
printf("%d ", arr->arr[i]);
getch(); // getch is windows
return 0;
}
关于c - 输入后下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022681/