C++ 为什么这个c++;在devc++;但不是在网站上?
此代码接受整数数组的输入,其中1≤ a[i]≤ n(n=数组大小),一些元素出现两次,其他元素出现一次。我们必须归还丢失的号码 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 在DEVC++中,它工作得很好,但是当我提交一个叫做LeeCal码的网站时,它给了我以下的错误 运行时错误消息: 第924行:字符9:运行时错误:引用绑定到“int”类型的空指针(stl_vector.h)摘要:UndefinedBehaviorSanitizer: 未定义的行为 /usr/bin/./lib/gcc/x86_64-linux-gnu/8/../../../../../../../../include/c++/8/bits/stl_vector.h:933:9C++ 为什么这个c++;在devc++;但不是在网站上?,c++,arrays,runtime-error,C++,Arrays,Runtime Error,此代码接受整数数组的输入,其中1≤ a[i]≤ n(n=数组大小),一些元素出现两次,其他元素出现一次。我们必须归还丢失的号码 输入: [4,3,2,7,8,2,3,1] 输出: [5,6] 在DEVC++中,它工作得很好,但是当我提交一个叫做LeeCal码的网站时,它给了我以下的错误 运行时错误消息: 第924行:字符9:运行时错误:引用绑定到“int”类型的空指针(stl_vector.h)摘要:UndefinedBehaviorSanitizer: 未定义的行为 /usr/bin/./li
vector findDisappearedNumbers(vector&nums)
{
向量温度;
const int len=nums.size();
int j=0;
//对数组进行排序
排序(nums.begin(),nums.end());
//将非重复数字添加到临时向量中
对于(int i=0;i执行此操作时,向量temp
为空:
temp[j++]=nums[i];
所以你正在访问元素之外。这是你不能对结果有任何期望的。任何事情都可能发生。一旦你的代码包含了ub,编译器就不再有任何义务。 它在DeV C++中看起来很好。因为另一个编译器的错误信息说,你的代码中有未定义的行为。杰斯珀已经有了。指针一。
另一个例子是:
if(nums[i]!=nums[i+1])
在上一次迭代中,i
等于len-1
,因此nums[i+1]
尝试读取不存在的num[len]
。
您需要将循环更改为:
for(int i=0;i<len-1;i++)
作为一个旁注。在结尾有一个函数来清除一个向量/添加一个元素。你可以找到完整的列表。
DEVC++和LeTeCKE使用不同的编译器。根据需要,使用“代码>CLAN 9 < /Cord>@ TangeNangKon”,如果代码正确,它应该在任何标准兼容编译器上编译。;所以我尝试了这个,它说“Heap buffer overflow”@NagasaiPsv如果你想在向量的末尾添加元素,你可以直接使用。你甚至不需要存储j
。
for(int i=0;i<len-1;i++)
for(int i=0;i<temp.size();i++)