使用C ++在数组中插入值时出现奇怪的异常/错误

时间:2017-10-10 21:21:35

标签: c++ arrays insert

我不知道我的程序出错了什么,所以它没有输出它的输出意义。

我编写了一个程序,将一个值插入到数组中的特定点,使用此代码可以正常工作,

class AppDelegate: UIResponder, UIApplicationDelegate, PKPushRegistryDelegate {

  func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

            self.voipRegistration()
    }

    func voipRegistration() {
        let mainQueue = DispatchQueue.main
        let voipRegistry: PKPushRegistry = PKPushRegistry(queue: mainQueue)
        voipRegistry.delegate = self
        voipRegistry.desiredPushTypes = [PKPushType.voIP]
    }


    func pushRegistry(_ registry: PKPushRegistry, didInvalidatePushTokenFor type: PKPushType) {
        //
    }

    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType) {
        //
    }

    func pushRegistry(_ registry: PKPushRegistry, didUpdate pushCredentials: PKPushCredentials, for type: PKPushType) {
        //
    }


    func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, for type: PKPushType, completion: @escaping () -> Void) {
        //
    }

以下是该程序的输出:

enter image description here

但如果我改变数组大小,即7,则会发生这种情况:

#include <iostream>
using namespace std;

main() {
   int arr[] = {1,3,5,7,8};
   int item = 10, k = 3, n = 5;
   int i = 0, j = n;

   cout<<"The original array elements are :\n";

   for(i = 0; i<n; i++) {
      cout<<"arr["<<i<<"] = "<< arr[i] <<"\n";
   }

   n = n + 1;

   while( j >= k) {
      arr[j+1] = arr[j];
      j = j - 1;
   }

   arr[k] = item;

   cout<<"The array elements after insertion :\n";

   for(i = 0; i<n; i++) {
      cout<<"arr["<<i<<"] = "<< arr[i] <<"\n";
   }
}

以上程序的输出:

enter image description here

我无法理解在这个程序中出现这样的异常/错误我做错了什么。

2 个答案:

答案 0 :(得分:3)

int arr[] = {1,3,5,7,8};

此数组的大小为5,因为其初始值设定项有5个元素。获得额外元素的 only 数组是字符串文字:"abc"是一个4 char的数组,其中0是第四个元素。此数组不是字符串文字。当代码写入数组末尾时,程序的行为是未定义的。

你可以通过说它确实包含六个元素:

int arr[6] = {1,3,5,7,8};

此数组中最后一个元素的值为0。

答案 1 :(得分:2)

只保留您编码的重要部分或多或少:

   int arr[] = {1,3,5,7,8,9,6};
   int n = 7; 
   n = n + 1;
   for(i = 0; i<n; i++) {
     cout<<"arr["<<i<<"] = "<< arr[i] <<"\n";
   }

数组具有固定大小。您无法更改它,因此您也无法将元素“插入”到数组中。您的arr有7个元素,当您访问arr[7](在循环内)时,您正在访问数组的边界。这是未完成的行为,您的代码可以输出任何内容。

如果要将元素插入动态大小的数组中,请查看std::vector