gpt4 book ai didi

C++ 数组内容在函数调用之间发生变化

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:47 25 4
gpt4 key购买 nike

示例代码:

#include <stdio.h>

class compArray {
public:
unsigned int* myArr; //The array

compArray() {
unsigned int temp[4];
for (unsigned int i=0;i<4;i++) {
temp[i] = 0;
}
myArr = temp;
print_arr(myArr);
}

void set() {
print_arr(myArr);
}

static void print_arr(unsigned int* arr) {
printf("Printing the array============\n");
for (unsigned int i=0;i<4;i++) {
printf("%u\n",arr[i]);
}
printf("\n");
}
};

main() {
compArray test;
test.set();
}

输出:

Printing the array============
0
0
0
0

Printing the array============
134513919
3221174380
0
0

我确定我错过了一些简单的事情,但为什么会这样?

最佳答案

在你的构造函数中,你有这两行:

unsigned int temp[4];
...
myArr = temp;

您将成员变量指针myArr 设置为等于局部变量temp 的地址。但是,一旦您从构造函数返回,temp 就会超出范围并被销毁

在那之后,myArr 引用不再分配的存储,并表现出未定义的行为。

关于C++ 数组内容在函数调用之间发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5984320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com