为什么用string就wa两个点了,改成char数组就ac了?

P1210 [USACO1.3] 最长的回文 Calf Flac

有个很疑惑的点,```string```初始值为```NULL```,要```resize```或```push_back```(和```vector<char>```差不多)来进行改变。在长度为```0```的时候访问应该会```Runtime Error```,而不是```Wrong Answer```。
by Kapo_Hisy @ 2023-10-03 17:39:48


@[Kapo_Hisy](/user/922691) 数组越界一般不会直接RE
by xuyao35 @ 2024-01-29 14:08:17


数组本质是指针空间,出去了就是空指针解引用,应该会没掉。而且 string 的本质我没有了解,应该是 new 指针,指针应该更会 RE。 WA 的点我不太清楚,你的 char 版本我没看,有没有种可能,就是getline 和 fgets 的问题。
by Kapo_Hisy @ 2024-01-29 14:30:05


当然,我有可能说错了。还是谢谢大佬 @[xuyao35](/user/1122193) 的提示,我会去查一下。
by Kapo_Hisy @ 2024-01-29 14:31:01


我查了一下,词条是:数组越界会 RE 吗? 回复: Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。 以下列出常见的错误类型: ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。 一般例如指针、**数组下标越界**都会造成这个错误的。
by Kapo_Hisy @ 2024-01-29 14:33:32


@[CurryNo_1](/user/828573) ,你的50分代码是两个WA,一个TLE,你的87分代码是一个TLE,好像没有两个WA的点。
by Kapo_Hisy @ 2024-01-29 14:36:05


@[Kapo_Hisy](/user/922691) 可以逝一下: ```cpp #include<bits/stdc++.h> using namespace std; int main() { long long n[1] = {1}; cout << n[2] << endl; return 0; } ``` 我的编译器输出了12653456,并且正常地return value 0
by xuyao35 @ 2024-01-29 19:09:30


@[Kapo_Hisy](/user/922691) 交到这题评测是全WA
by xuyao35 @ 2024-01-29 19:10:40


那可能确实不会直接报 RE,抱歉,本蒟蒻学到了。这应该是内存空间溢出,随便找一个 int 空间解引用。
by Kapo_Hisy @ 2024-01-30 11:15:45


|