动态内存分配混乱

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;.