C 在某些测试用例之后,堆会损坏
这是我收到的错误。C 在某些测试用例之后,堆会损坏,c,dynamic,memory-leaks,C,Dynamic,Memory Leaks,这是我收到的错误。 另外,请帮助我分析代码的复杂性。主要问题是: 只能为5个条目重新分配数组。读取c的6值后,可以访问并修改这些数组末尾以外的条目 还有许多其他问题: 不能从C中的运行时表达式初始化全局对象:int*starting_time=(int*)malloc(sizeof(int))无效。实际上,必须编译此代码作为C++给出标题文件 。请注意,如果您只是将这些数组指针初始化为NULL,或者让它们处于未初始化和全局状态,则代码的工作原理相同 具有短名称的全局变量,如intc,s,a
另外,请帮助我分析代码的复杂性。主要问题是:
- 只能为5个条目重新分配数组。读取
的c
值后,可以访问并修改这些数组末尾以外的条目6
- 不能从C中的运行时表达式初始化全局对象:
int*starting_time=(int*)malloc(sizeof(int))代码>无效。实际上,必须编译此代码作为C++给出标题文件<代码> <代码>。请注意,如果您只是将这些数组指针初始化为
,或者让它们处于未初始化和全局状态,则代码的工作原理相同NULL
- 具有短名称的全局变量,如
intc,s,a代码>被认为是糟糕的样式,并且容易出错。您应该在
函数中将所有这些变量设置为本地变量sight\u seing()
- 数组在C中是基于零的,循环
主要问题是:for(int i=1;i a) 返回p; 其他的 如果(k-t>=s) 返回k; p=k; } } 无效视力(无效){ int c,s,a; 如果(扫描(“%d\n%d\n%d”、&c、&s、&a)!=3){ printf(“无效输入\n”); 出口(1); } int*开始时间=(int*)calloc(c,sizeof(int)); int*频率\时间=(int*)calloc(c,sizeof(int)); int*duration_time=(int*)calloc(c,sizeof(int)); int*旅游城市=(int*)calloc(c,sizeof(int)); 如果(!开始时间!频率时间!持续时间!游览城市){ printf(“无法分配内存\n”); 出口(1); } 对于(int i=0;i
=s){ k=开始时间[i]; x++; }否则{ k=检查(t、i、a、s、开始时间、频率时间); if(k+持续时间\u时间[i]a) 旅游城市[i]=0; 其他的 旅游城市[i]=1; } q=1; 对于(int i=0;i =0) printf(“可能的最大值%d\n”,x); 其他的 printf(“\n观光不是不可能的\n”);//不确定您的意思? 免费(开始时间); 免费(频率/时间); 免费(持续时间); 免费(游览城市); } int main(int argc,字符**argv){ int n; 如果(扫描频率(“%d”,&n)==1){ 而(n-->0){ 观光; } } 返回0; } - 只能为5个条目重新分配数组。读取
的c
值后,可以访问并修改这些数组末尾以外的条目6
- 不能从C中的运行时表达式初始化全局对象:
int*starting_time=(int*)malloc(sizeof(int))代码>无效。实际上,必须编译此代码作为C++给出标题文件<代码> <代码>。请注意,如果您只是将这些数组指针初始化为
,或者让它们处于未初始化和全局状态,则代码的工作原理相同NULL
- 具有短名称的全局变量,如
intc,s,a代码>被认为是糟糕的样式,并且容易出错。您应该在
函数中将所有这些变量设置为本地变量sight\u seing()
- 数组在C中是基于零的,循环
for(int i=1;i a) 返回p; 其他的 如果(k-t>=s) 返回k; p=k; } } 无效视力(无效){ int c,s,a; 如果(扫描(“%d\n%d\n%d”、&c、&s、&a)!=3){ printf(“无效输入\n”); 出口(1); } int*开始时间=(int*)calloc(c,sizeof(int)); int*频率\时间=(int*)calloc(c,sizeof(int)); int*duration_time=(int*)calloc(c,sizeof(int)); int*旅游城市=(int*)calloc(c,sizeof(int)); 如果(!开始时间!频率时间!持续时间!游览城市){ printf(“无法分配内存\n”); 出口(1); } 对于(int i=0;i
=s){ k=开始时间[i]; x++; }否则{ k=检查(t、i、a、s、开始时间、频率时间); if(k+持续时间\u时间[i]a) 旅游城市[i]=0; 其他的 旅游城市[i]=1; } q=1; 对于(int i=0;i =0) printf(“可能的最大值%d\n”,x); 其他的 printf(“\n观光不是不可能的\n”);//不确定您的意思? 免费(开始时间); 免费(频率/时间); 免费(持续时间); 免费(游览城市); } int main(int argc,字符**argv){ int n; 如果(扫描频率(“%d”,&n)==1){ #include <cstdlib> #include <stdio.h> int *starting_time = NULL; int *frequency_time = NULL; int *duration_time = NULL; int *toured_cities = NULL; int check(int t,int i,int s, int a){ int k; int p=starting_time[i]; while (1){ k= p+frequency_time[i]; if (k>a) return p; else if ((k-t)>=s) return k; p=k; } } void sight_seeing(){ int c,s,a; int size=4; scanf("%d\n%d\n%d",&c,&s,&a); starting_time=(int *)realloc(starting_time,size*sizeof(int)); frequency_time=(int *)realloc(frequency_time,size*sizeof(int)); duration_time=(int *)realloc(duration_time,size*sizeof(int)); toured_cities = (int *)realloc(toured_cities,size*sizeof (int)); for (int i=1;i<c;i++){ scanf("%d",&starting_time[i]); scanf("%d",&frequency_time[i]); scanf("%d",&duration_time[i]); toured_cities[i]=0; } int t = 0;int x = 0;int i=1;int k;bool q; while (t<a){ if (i==c) break; if ((starting_time[i]-t)>=s) { k=starting_time[i]; x++; } else{ k = check(t,i,s,a); if ((k+duration_time[i])<a) x++; else if ((k+duration_time[i])==a) { if (i<c-1) k=starting_time[i]; } } t=k+duration_time[i]; if (t>a) toured_cities[i]=0; else toured_cities[i]=1; i++; } for (int i=1;i<c;i++){ if (toured_cities[i]==1) q=1; else q=0; } if (q==1 && x>=0) printf("The maximum sightseeing possible %d \n",x); else printf("\nSightseeing is not Impossible\n"); starting_time = (int *)realloc(starting_time,0); frequency_time = (int *)realloc(frequency_time, 0); duration_time = (int *)realloc(duration_time,0); toured_cities = (int *)realloc(toured_cities,0); } int main(int argc, char** argv) { int n; scanf("%d",&n); while (n--){ sight_seeing(); } return 0; }
*** Error in `./prog': free(): invalid next size (fast): 0x00002b2db77fac20 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x70bcb)[0x2b2db738dbcb] /lib/x86_64-linux-gnu/libc.so.6(+0x76f96)[0x2b2db7393f96] /lib/x86_64-linux-gnu/libc.so.6(+0x7778e)[0x2b2db739478e] ./prog(+0xcd3)[0x2b2db643acd3] ./prog(+0x875)[0x2b2db643a875] /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1) [0x2b2db733d2b1] ./prog(+0x93a)[0x2b2db643a93a] ======= Memory map: ======== 2b2db643a000-2b2db643b000 r-xp 00000000 fd:00 17031175 /home/S5BAtg/prog 2b2db643b000-2b2db643f000 rw-p 00000000 00:00 0 2b2db6448000-2b2db644d000 rw-p 00000000 00:00 0 2b2db663b000-2b2db663c000 r--p 00001000 fd:00 17031175 /home/S5BAtg/prog 2b2db663c000-2b2db663d000 rw-p 00002000 fd:00 17031175 /home/S5BAtg/prog
#include <stdio.h> #include <stdlib.h> int check(int t, int i, int a, int s, int *starting_time, int *frequency_time) { int k; int p = starting_time[i]; while (1) { k = p + frequency_time[i]; if (k > a) return p; else if (k - t >= s) return k; p = k; } } void sight_seeing(void) { int c, s, a; if (scanf("%d\n%d\n%d", &c, &s, &a) != 3) { printf("invalid input\n"); exit(1); } int *starting_time = (int*)calloc(c, sizeof(int)); int *frequency_time = (int*)calloc(c, sizeof(int)); int *duration_time = (int*)calloc(c, sizeof(int)); int *toured_cities = (int*)calloc(c, sizeof(int)); if (!starting_time || !frequency_time || !duration_time || !toured_cities) { printf("cannot allocate memory\n"); exit(1); } for (int i = 0; i < c; i++) { if (scanf("%d%d%d", &starting_time[i], &frequency_time[i], &duration_time[i]) != 3) { printf("invalid input\n"); exit(1); } } int t = 0; int x = 0; int i, k; bool q; for (i = 0; i < c && t < a; i++) { if (starting_time[i] - t >= s) { k = starting_time[i]; x++; } else { k = check(t, i, a, s, starting_time, frequency_time); if (k + duration_time[i] < a) x++; else if (k + duration_time[i] == a) { if (i < c - 1) k = starting_time[i]; } } t = k + duration_time[i]; if (t > a) toured_cities[i] = 0; else toured_cities[i] = 1; } q = 1; for (int i = 0; i < c; i++) { if (toured_cities[i] == 0) { q = 0; break; } } if (q == 1 && x >= 0) printf("The maximum sightseeing possible %d \n", x); else printf("\nSightseeing is not Impossible\n"); // not sure what you mean? free(starting_time); free(frequency_time); free(duration_time); free(toured_cities); } int main(int argc, char **argv) { int n; if (scanf("%d", &n) == 1) { while (n-- >0) { sight_seeing(); } } return 0; }
- 只能为5个条目重新分配数组。读取