首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DevC++上出现了一个奇怪的sizeof()错误

DevC++上出现了一个奇怪的sizeof()错误
EN

Stack Overflow用户
提问于 2011-11-14 21:57:30
回答 9查看 1.5K关注 0票数 2

我知道我不应该使用Dev-C++,但这是学校的必修课,所以我对此无能为力。

主题是C/C++中的指针,测量整数数组的长度时出现错误。请参见以下代码:

代码语言:javascript
复制
// POINTER
# include<iostream>
# include<string.h>

using namespace std;

int main(){
    //neues Feld anlegen
    int *a = new int[5];

    a[0] = 12;
    a[1] = 5;
    a[2] = 43;
    a[3] = -12;
    a[4] = 100;
    // Feld füllen

    for(int i = 0; i<sizeof(a);i++){
            cout<<a[i]<<"\n"<<endl;
            }
    cout<<sizeof(a);
    system("pause");
    return 0;

}

sizeof()返回4而不是5...Any ideas?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-11-14 21:59:11

它不是一个bug,因为它返回的是a本身的大小(在32位构建中是int* -4字节类型),而不是数组的长度。

请注意-其他人说大小取决于操作系统,这是一半正确的。这真的取决于构建。sizeof是一种编译时构造。

票数 26
EN

Stack Overflow用户

发布于 2011-11-14 22:02:14

首先,你不应该认为一个“奇怪”行为的罪魁祸首是编译器:大多数时候这个bug是你的。

实际上,你的sizeof指令告诉你一个int*的大小,这是设计出来的,所以这不是编译器的错,而是你的误解。没有办法使用sizeof来判断动态分配的数组的大小。

票数 5
EN

Stack Overflow用户

发布于 2011-11-14 22:02:24

在本例中是一个指针,指针的大小取决于编译器。

您正在执行sizeof(int*)。实际上,您使用的是32位编译器,而您的编译器\系统指针是32位。

你不能从对象的指针获取分配new的对象的大小,sizeof是在编译时计算的,而不是在运行时计算的。

要获得数组的大小,您应该这样做:

代码语言:javascript
复制
int a[5]; // Array allocated in stack, we can use sizeof.
std::cout << (sizeof(a) / sizeof(int));

sizeof返回以字节为单位的大小,而不是数组中元素的数量。

该代码等同于编写

代码语言:javascript
复制
std::cout << (sizeof(int[5]) / sizeof(int));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8122637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档