动态内存分配混乱
Dynamic memory allocation confusion
我看到一个教程,讲师为 n*int size
动态分配内存(n
事先不知道,用户会把它作为输入)。出于好奇,我将代码从 calloc(n,sizeof(int))
更改为 calloc(1,sizeof(int))
,我希望看到错误,但我没有遇到错误,代码运行顺利。
如果我递增指针并且它继续没有问题,我为什么要使用除 calloc(1,sizeof(int))
之外的任何其他东西?
#include <iostream>
using namespace std;
int main(){
int n;
printf("enter the size of array\n");
scanf("%d",&n);
int* A = (int*)calloc(1,sizeof(int));
for(int i=0; i<n; i++){
*(A+i) = i+1;
}
for(int i=0; i<n; i++){
printf("%d\n", A[i]);
printf("%d\n", &A[i]);
}
// free(A)
return 0;
}
I was expecting to see an error
您的期望被误导了。如果您在分配的存储区域之外访问,则程序的行为是未定义的。不能保证您会收到错误。
不要越界访问内存。避免未定义的行为。这很糟糕。程序坏了。
其他建议:避免在 C++ 中使用 calloc
。避免使用 using namespace std;
.
我看到一个教程,讲师为 n*int size
动态分配内存(n
事先不知道,用户会把它作为输入)。出于好奇,我将代码从 calloc(n,sizeof(int))
更改为 calloc(1,sizeof(int))
,我希望看到错误,但我没有遇到错误,代码运行顺利。
如果我递增指针并且它继续没有问题,我为什么要使用除 calloc(1,sizeof(int))
之外的任何其他东西?
#include <iostream>
using namespace std;
int main(){
int n;
printf("enter the size of array\n");
scanf("%d",&n);
int* A = (int*)calloc(1,sizeof(int));
for(int i=0; i<n; i++){
*(A+i) = i+1;
}
for(int i=0; i<n; i++){
printf("%d\n", A[i]);
printf("%d\n", &A[i]);
}
// free(A)
return 0;
}
I was expecting to see an error
您的期望被误导了。如果您在分配的存储区域之外访问,则程序的行为是未定义的。不能保证您会收到错误。
不要越界访问内存。避免未定义的行为。这很糟糕。程序坏了。
其他建议:避免在 C++ 中使用 calloc
。避免使用 using namespace std;
.