动态内存分配较大值时出现故障

时间:2018-11-24 14:31:32

标签: c dynamic-memory-allocation

在下面的代码中,我将 n 作为用户输入,并且根据其值,我已将内存分配给指针数组( n 指针数组是结构的一部分)。整个代码对于 n 小于4,大于等于4或大于4的值都适用,在指针数组中输入值时会产生分段错误。

我可以想象这可能是因为没有分配内存,但是为什么它只有4个我听不懂

这里是发生问题的摘要。

#include <stdio.h>
#include <stdio_ext.h>
#include <stdlib.h>
// static int n;
typedef struct test_case {
  int n;
  int *test[];
} testCase;

int maxsc(testCase *test_case_ptr);
int find_maximum(int *ptr, int n);

int main() {
  int T;
  int x = 0;
  int temp;
  testCase *test_case_ptr;
  printf("T = ");
  scanf("%d", &T);
  printf("\n");
  for (int i = 0; i < T; i++) {
    printf("N = ");
    scanf("%d", &test_case_ptr->n);
    temp = test_case_ptr->n;
    printf("\n");
    test_case_ptr = (testCase *)malloc(sizeof(struct test_case));
    for (int i = 0; i < temp; i++) {
      test_case_ptr->test[i] = malloc(sizeof(int *) * test_case_ptr->n);
    }
    test_case_ptr->n = temp;
    // printf("%d\n", test_case_ptr->n);
    printf("give values\n");
    for (int j = 0; j < test_case_ptr->n; j++) {
      for (int k = 0; k < test_case_ptr->n; k++) {
        scanf("%d", &test_case_ptr->test[j][k]);
      }
    }
    int max_score = maxsc(test_case_ptr);
    printf("\n");
    printf("The max_score_%d = %d \n", x++, max_score);
}

}

1 个答案:

答案 0 :(得分:0)

首先,您尝试在为它分配mem之前使用test_case_ptr结构。其次,在使用灵活数组时,当您为结构体分配内存时,需要为其分配内存。

scanf("%d", &temp);
// Allocate mem for the struct plus the array
test_case_ptr = malloc(sizeof(struct test_case) + sizeof(int *) * temp);
test_case_ptr->n = temp;
// Allocate each row in the array
for (int i = 0; i < test_case_ptr->n; i++) {
  test_case_ptr->test[i] = malloc(sizeof(int) * test_case_ptr->n);
}
// .....