【发布时间】:2016-12-11 16:39:34
【问题描述】:
当我执行*arr = malloc(i * sizeof(struct cluster_t*)); 时,我的代码不断崩溃。簇是一种结构。
我不确定是什么问题。第二个输入是一个结构数组(簇)它应该将txt文件加载到数组中,每一行作为一个单独的结构第一个输入是一个.txt文件,其中包含:
count=20
40 86 663
43 747 938
47 285 973
49 548 422
52 741 541
56 44 854
57 795 59
61 267 375
62 85 874
66 125 211
68 80 770
72 277 272
74 222 444
75 28 603
79 926 463
83 603 68
86 238 650
87 149 304
89 749 190
93 944 835
这里是部分代码似乎有问题(我在第一个答案后稍微修改了它)这不是一个完整的代码:
int load_clusters(char *filename, struct cluster_t **arr) //nefunkcne
{
assert(arr != NULL);
char buffer_load[256] = {'0'};
int riadok = 0;
int count = 0;
int *X = malloc(sizeof(int));
if (X == NULL) {
perror("Chyba mallocu na load_clusters X");
free(X);
exit(EXIT_FAILURE);
}
int *Y = malloc(sizeof(int));
if (Y == NULL) {
perror("Chyba mallocu load_clusters Y");
free(X);
free(Y);
exit(EXIT_FAILURE);
}
int *ID = malloc(sizeof(int));
if (ID == NULL) {
perror("Chyba mallocu v load_clusters ID");
free(X);
free(Y);
free(ID);
exit(EXIT_FAILURE);
}
FILE *subor = fopen(filename, "r");
if (subor == NULL) {
perror("Chyba nacitania suobru fopen load_clusters!");
}
while (fgets(buffer_load, sizeof buffer_load, subor) != NULL) {
if (riadok > 0) {
struct cluster_t shluk;
sscanf(buffer_load,"%d %d %d", ID, X, Y);
init_cluster(&shluk, 1);
struct obj_t objekt;
objekt.id = *ID;
objekt.x = *X;
objekt.y = *Y;
append_cluster(&shluk, objekt);
arr[riadok - 1] = malloc(sizeof(struct cluster_t*));
if (arr[riadok-1] == NULL) {
perror("Chyba mallocu v load_clusters 388!");
free(arr[riadok - 1]);
exit(EXIT_FAILURE);
}
(*arr)[riadok - 1] = shluk;
} else {
sscanf(buffer_load, "count=%d", &count);
*arr = malloc(count * sizeof(struct cluster_t));
if (arr == NULL) {
perror("Chyba mallocu v load_clusters 400!");
free(*arr);
exit(EXIT_FAILURE);
}
}
riadok++;
}
fclose(subor);
free(X);
free(Y);
free(ID);
return cout;
}
我保持最新的完整代码(请记住使用 `-std=c99 -Wextra -Wall -Werror -DNDEBUG 和 -lm 如果在 gcc 中,因为数学库): https://docs.google.com/document/d/1xoNcBpY1lkmki3-E5WUYFVg-xojjvEkUJ63XC_UzhtM/edit?usp=sharing
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
-
总是很好地显示提到的结构的定义
标签: c crash buffer-overflow callstack