c - 将值分配给动态分配的 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;
}
}
}
我主要调用它:
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 个元素显式分配给了给定值。但是,当我打印超过第 10 个元素时,我看到该值也分配给了这些元素。这是为什么?
解决方案
需要注意的两件事,如评论中所述,您仅取消引用指向第一个元素的指针。您可以在我们解决它之前for (int i = 0; i<15; i++, myArr++)
或printf("myArr[%d] = %d\n", i, myArr[i]);
现在修复它,尝试访问不“属于”您的内存是未定义的行为。您只为指针分配了 10 * sizeof(int) 字节,因此您应该只写入该内存,并且应该只读取该内存。你不应该依赖代码中发生的事情的结果,这是不好的做法,可能会导致糟糕的代码。
推荐阅读
- javascript - 是否可以使用变量来解构对象?
- sql - 根据先决条件从列中提取数值 (VARCHAR)
- reactjs - Next.JS,Typescript withRouter:“Type ...不可分配给React中的类型'IntrinsicAttributes&Pick <>'”
- android - How to replace every line by \n
- python - 通过 Python 脚本重写 Outlook 中的邮件正文
- python - 有没有人在 iOS 上成功安装过 Selenium?
- azure - 文件转换:EPERM:Azure DevOps 中不允许的操作
- python - DataFrame.write.parquet - HIVE 或 Impala 无法读取 Parquet 文件
- entity-framework - 为什么关系一对多给我null(实体框架)?
- haskell - 不使用'stack exec'的Haskell独立可执行文件