for(i=0;i<t;i++){ cin>>n; p = new int [n]; cin>>p[i]; // cout<<p[n/2+1]; } 为什么赋值不进去
时间: 2024-09-15 20:02:23 浏览: 2
这段代码的作用是在一个循环里,先读取整数 `t`,然后针对每个 `t` 的值,会读取一个整数 `n` 和对应的数组 `p`。问题在于,当你尝试用 `cin` 读取 `p[i]` 的时候,实际上你只读到了第一个元素,因为数组下标是从 0 开始的,所以 `p[i]` 等价于 `p[0]`。
另外,如果你试图访问数组 `p` 的某个位置,比如 `p[n/2 + 1]`,这可能会导致越界错误,特别是当 `n` 为奇数时,因为这个索引可能超过数组的有效范围 `[0, n-1]`。你需要保证你不会超出数组的边界来访问元素。
修复这个问题,你应该在读取每个 `p[i]` 之前先检查 `i < n`,确保没有越界,并确保 `n` 被正确地分配了:
```cpp
for (int i = 0; i < t; i++) {
cin >> n;
if (i < n) { // 检查是否越界
p = new int[n]; // 分配新数组
cin >> p[i];
}
else {
cout << "Error: Invalid array index!" << endl;
}
// 如果需要访问中间元素,应使用合法的索引,如 n % 2 == 0 且 i > 0
if (i >= n / 2 && n % 2 == 0) {
cout << p[i] << endl;
}
}
// 别忘了在循环结束后删除动态分配的内存
for (int i = 0; i < t; i++) {
delete [] p;
p = nullptr; // 或者直接将指针设为 nullptr
}
```