杭电ACM 1002为什么总是 Runtime Error(ACCESS_VIOLATION)?

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

void addbig(char *a, char *b)
{

int ret;
int c = 0;
int lena = strlen(a);
int lenb = strlen(b);
int maxlen = (lena > lenb ? lena : lenb) + 1;
int len = maxlen;

char *sum = (char *) malloc(sizeof(maxlen + 1));

memset((void *)sum, '0', maxlen);
sum[maxlen--] = '\0';
lena--;
lenb--;

while (lena >= 0 && lenb >= 0)
{
ret = a[lena--] - '0' + b[lenb--] - '0' + c;
c = ret / 10;
ret %= 10;
sum[maxlen--] = ret + '0';
}
if (lena < 0)
{
while (lenb >= 0)
{
ret = b[lenb--] - '0' + c;
c = ret / 10;
ret %= 10;
sum[maxlen--] = ret + '0';
}
}
else if (lenb < 0)
{
while (lena >= 0)
{
ret = a[lena--] - '0' + c;
c = ret / 10;
ret %= 10;
sum[maxlen--] = ret + '0';
}
}
sum[maxlen] = c + '0';

for (int i = 0; i < len; ++i)
{
if (i == 0 && sum[i] == '0')
continue;
printf("%c", sum[i]);
}
printf("\n");
}

int main()
{
int n;
scanf("%d", &n);
char a[1001];
char b[1001];

for (int i = 0; i < n; ++i)
{
scanf("%s%s", a, b);

printf("Case %d:\n", i + 1);
printf("%s + %s = ", a, b);
addbig(a, b);
if (i != n - 1)
printf("\n");
}

return 0;
}

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

void addbig(char *a, char *b)
{

    int ret;
    int c = 0;
    int lena = strlen(a);
    int lenb = strlen(b);
    int maxlen = (lena > lenb ? lena : lenb) + 1;
    int len = maxlen;

    char *sum = (char *) malloc(sizeof(maxlen + 1));

    memset((void *)sum, '0', maxlen);
    sum[maxlen--] = '\0';
    lena--;
    lenb--;

    while (lena >= 0 && lenb >= 0)
    {
        ret = a[lena--] - '0' + b[lenb--] - '0' + c;
        c = ret / 10;
        ret %= 10;
        sum[maxlen--] = ret + '0';
    }
    if (lena < 0)
    {
        while (lenb >= 0)
        {
            ret = b[lenb--] - '0' + c;
            c = ret / 10;
            ret %= 10;
            sum[maxlen--] = ret + '0';
        }
    }
    else if (lenb < 0)
    {
        while (lena >= 0)
        {
            ret = a[lena--] - '0' + c;
            c = ret / 10;
            ret %= 10;
            sum[maxlen--] = ret + '0';
        }
    }
    sum[maxlen] = c + '0';

    for (int i = 0; i < len; ++i)
    {
        if (i == 0 && sum[i] == '0')
            continue;
        printf("%c", sum[i]);
    }
    printf("\n");
    delete sum;//你忘了释放空间,导致多个样例使得动态开的空间不断增大,最后爆了,ps:你算的数组长度真的很精确,这是C++版本的释放空间,C版本目测用free,但是我不会,不好意思了。
}

int main()
{
    int n;
    scanf("%d", &n);
    char a[1001];
    char b[1001];

    for (int i = 0; i < n; ++i)
    {
        scanf("%s%s", a, b);

        printf("Case %d:\n", i + 1);
        printf("%s + %s = ", a, b);
        addbig(a, b);
        if (i != n - 1)
            printf("\n");
    }

    return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

杭电acm总是Runtime Error (ACCESS_VIOLATION)
runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。比如说:除以零 数组越界:int a[3]; a[10000000]=10 指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10 使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *...

为什么提示Runtime Error(ACCESS_VIOLATION)?我用c语言,我自己的CF4...
可能是算法问题,复杂度太大,超过运行时间。在杭电有时间限制的

...为什么总是提示Runtime Error(ACCESS_VIOLATION),我测试结果没问题啊...
Runtime Error一般是数组越界, 可能你数组定义小了

杭电OJ1004题,结果Runtime Error(ACCESS_VIOLATION),请大牛为我查错
另外还有一个问题, 你忘记初始化q了,你仅仅只是给q赋了一个全局的初值0,每个case开始的时候都应该初始化。 在while(N){的第一句写q=0;这样就可以了

杭电1052题老显示Runtime Error(ACCESS_VIOLATION)
双方最多可以有1000只马,你的a b数组开的不够大

杭电acm1003为什么都过不了,显示Runtime Error(ACCESS_VIOLATION)
你的 mm 没有赋初值,所以会Runtime Error 还有就是 while的循环结束条件不足,如果到最后 m还是没有==0你就错了 这是ac的代码 include

...已提交就是Runtime Error (ACCESS_VIOLATION)啊,请问是哪的问题_百...
runtime - error, 表示运行时错误, (access violation 表示访问越界)问题出在你的p指针上, 当执行完组数据时, 你的p指针没有指向申请的空间的起始地址,而是 当前这组测试数据的最后一个字符的地址, 当执行多组数据后,p指针会指向申请空间意外的地方,所以访问越界。我加了一个q指针, 保存...

...杭电ACM上就显示runtime,error ACCESS_VIOLATION,求大神讲解_百度知 ...
char string_color[1000][15];char *string_num_max1[1000];可能是堆栈大小的问题,你这些变量都是在堆栈里分配的,换成动态分配试试.

杭电ACM 1002为什么总是 Runtime Error(ACCESS_VIOLATION)?_百度...
include <stdio.h>#include <math.h>#include <string.h>#include <stdlib.h>void addbig(char *a, char *b){ int ret; int c = 0; int lena = strlen(a); int lenb = strlen(b); int maxlen = (lena > lenb ? lena : lenb) + 1; int len = maxlen; ...

杭电ACM1004,Runtime Error,(ACCESS_VIOLATION)
include<cstdlib> include<cstring> using namespace std;struct node { int count;char color[15];}*c;int main(){ int n,i,j,max=1;char pop[15];while(cin>>n,n){ c=(struct node*)malloc(sizeof(c[0])*n);\/\/开辟n个结构体数组 cin>>c[0].color;c[0].count=1;strcpy(pop...

相似回答
大家正在搜