我在尝试解决HackerRank上的this问题时遇到此问题。 在repl.it我的代码运行良好,但在他们的控制台上我有这个问题。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int t; //qtd de viagens
int m; //dinheiro para os sorvetes
int n; //qtd de sabores de sorvetes
int c[n+1]; //preço de cada sorvete
int r[t];
int s[t];
scanf("%d", &t);
for(int j = 0; j < t; j++){
scanf("%d", &m);
scanf("%d", &n);
for(int i = 1; i <= n; i++){
scanf("%d", &c[i]);
}
for (int i = 1; i < n; i++){
for(int k =i+1; k <= n; k++){
if (c[i]+c[k] == m){
r[j] = i;
s[j] = k;
}
}
}
}
for(int i = 0; i < t; i++){
printf("%d %d\n", *&r[i], *&s[i]);
}
return 0;
}
输入:
2
4
5
1 4 5 3 2
4
4
2 2 4 3
repl.it上的输出:
1 4
1 2
HackerRank上的输出:
~ no response on stdout ~
它还为我提供了分段错误消息。
答案 0 :(得分:0)
这里有2个问题:
您正在使用VLA,并且所有编译器都不支持它。
我正在谈论这个:
例如int c[n+1]
。 Chage表示动态分配
在使用之前使用值初始化变量(就像您使用n
和t
所做的那样)。
答案 1 :(得分:0)
List
我使用valgrind来检测内存泄漏:
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
int main() {
int t, m, n;
//Declaration of dynamic arrays "r", "s" and "c"
int *c, *r, *s;
scanf("%d", &t);
//Allocation of memory for the int arrays "r" and "s"
r = malloc(t * sizeof(int));
s = malloc(t * sizeof(int));
for(int j=0; j < t; j++){
scanf("%d", &m);
scanf("%d", &n);
//Allocation of memory for the int array "c"
c = malloc(n+1 * sizeof(int));
for(int i = 1; i <= n; i++){
scanf("%d", &c[i]);
}
for (int i = 1; i < n; i++){
for(int k = i+1; k <= n; k++){
if ((c[i] + c[k]) == m){
r[j] = i;
s[j] = k;
}
}
}
free(c);
}
for(int i = 0; i < t; i++){
printf("%d %d\n", *&r[i], *&s[i]);
}
free(r);
free(s);
return 0;
}