我有这个程序可以在我的大学实验室找到,但是当我在家里运行它会得到不同的结果
#include <stdio.h>
int main(int argc, char* argv[]) {
const int size=100;
int n, sum=0;
int* A = (int*)malloc( sizeof(int)*size );
for (n=size-1; n>0; n--)
A[n] = n;
for (n=0;n<size; n++)
sum += A[n];
printf ("sum=%d\n", sum);
return 0;
}
我期待4950
作为结果,但我会像112133223
那样得到不同的结果。为什么会这样?
答案 0 :(得分:7)
您没有为A[0]
分配值。因此,A[0]
会将垃圾值添加到sum
。
更改
for (n=size-1; n>0; n--)
^^^
到
for (n=size-1; n>=0; n--)
^^^^
此外,您需要通过执行以下操作释放动态分配的内存:
free(A);
返回之前。
答案 1 :(得分:2)
您永远不会为A [0]赋值 - 第一个循环快速结束。但是,您确实在求和中包含了此未分配的值。
答案 2 :(得分:1)
A[0]
未定义:
for (n=size-1; n>0; n--)
应该是
for (n=size-1; n>=0; n--)
答案 3 :(得分:1)
仅仅因为你没有在第一个元素中放置任何值,你就有了垃圾。因此,一些随机数总和。
#include <stdio.h>
#include<stdlib.h> //for malloc
int main(int argc, char* argv[]) {
const int size=100;
int n, sum=0;
int* A = (int*)malloc( sizeof(int)*size );
for (n=size-1; n>=0; n--) //you forgot '='
A[n] = n;
for (n=0;n<size; n++)
sum += A[n];
printf ("sum=%d\n", sum);
return 0;
}
答案 4 :(得分:0)
它对我来说很好。我用GCC执行了它。这是我跑的程序:
#include <stdio.h>
#include <malloc.h>
int main(int argc, char* argv[]) {
const int size=100;
int n, sum=0;
int* A = (int*)malloc( sizeof(int)*size );
for (n=size-1; n>0; n--)
A[n] = n;
for (n=0;n<size; n++)
sum += A[n];
printf ("sum=%d\n", sum);
return 0;
}