相关疑难解决方法(0)

delete []"如何"知道操作数数组的大小?

Foo* set = new Foo[100];
// ...
delete [] set;
Run Code Online (Sandbox Code Playgroud)

您没有将数组的边界传递给delete[].但是这些信息存储在哪里?它是标准化的吗?

c++

235
推荐指数
5
解决办法
3万
查看次数

C++中的sizeof是在编译时还是运行时评估的?

例如,此代码段的结果取决于哪台机器:编译器机器或机器可执行文件有效?

sizeof(short int)
Run Code Online (Sandbox Code Playgroud)

c++ runtime sizeof compile-time

54
推荐指数
4
解决办法
2万
查看次数

如果free()知道我的数组的长度,为什么我不能在我自己的代码中要求它?

我知道将动态分配的数组的长度传递给操作它们的函数是一种常见的约定:

void initializeAndFree(int* anArray, size_t length);

int main(){
    size_t arrayLength = 0;
    scanf("%d", &arrayLength);
    int* myArray = (int*)malloc(sizeof(int)*arrayLength);

    initializeAndFree(myArray, arrayLength);
}

void initializeAndFree(int* anArray, size_t length){
    int i = 0;
    for (i = 0; i < length; i++) {
        anArray[i] = 0;
    }
    free(anArray);
}
Run Code Online (Sandbox Code Playgroud)

但是如果我无法从指针中获取已分配内存的长度,那么free()当我提供的内容完全相同时,"自动"知道如何解除分配?作为一名C程序员,为什么我不能进入魔术?

从哪里free()获得免费(har-har)知识?

c memory malloc free

44
推荐指数
4
解决办法
5281
查看次数

标签 统计

c++ ×2

c ×1

compile-time ×1

free ×1

malloc ×1

memory ×1

runtime ×1

sizeof ×1