微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将值分配给动态分配的int数组似乎超出了给定的限制

如何解决将值分配给动态分配的int数组似乎超出了给定的限制

我有以下功能(用C语言编写)

void initArr (int ** arr,int size,int value) {
* arr = (int*)malloc(size * sizeof(int));
if (*arr!=NULL) {
        for (int i = 0; i<size;i++) {
            *(*arr + i) = value;
        }
    }
}

我在main中称呼

int main(void) {
    int *myArr = NULL;
    initArr(&myArr,10,45);
    for (int i = 0; i<15; i++) {
        printf("myArr[%d] = %d\n",i,*myArr);
    }
    return 0;
}

输出为:

myArr[0] = 45
myArr[1] = 45
myArr[2] = 45
myArr[3] = 45
myArr[4] = 45
myArr[5] = 45
myArr[6] = 45
myArr[7] = 45
myArr[8] = 45
myArr[9] = 45
myArr[10] = 45
myArr[11] = 45
myArr[12] = 45
myArr[13] = 45
myArr[14] = 45

我不明白的是,我仅将数组的前10个元素明确分配给了给定值。但是,当我打印超过第十个元素时,我看到该值也已分配给这些元素。为什么呢?

解决方法

要注意的两件事,如注释中所述,您仅取消引用了指向第一个元素的指针。 您可以通过for (int i = 0; i<15; i++,myArr++)printf("myArr[%d] = %d\n",i,myArr[i]);进行修复 既然我们已经解决了这个问题,尝试到达不属于您的内存是未定义的行为。您只为指针分配了10 * sizeof(int)字节,因此您应该只写该内存,并且只应该读出该内存。您不应该依赖代码中发生的结果,这是错误的做法,并且可能导致错误的代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。