簡體   English   中英

將 int 指針分配給 void* 數組的索引時出現問題

[英]Problem assigning an int pointer to an index of void* array

我在 header 文件 Array.h 中定義了一個Array.h

Class 代碼:

class Array
{
    private:
        int length;
        void **data;

    public:
        Array();
        void push(void *);
};

我也有Array.cpp文件。

代碼:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "Array.h"

Array::Array()
{
    length = 0;
    data = NULL;
}

void Array::push(void *item)
{
    void **temp = new void *[length + 1];
    for (int i = 0; i < length; i++)
        temp[i] = data[i];
    temp[length] = item;
    data = temp;
    length++;
}

最后, main.cpp

代碼:

#include <stdio.h>
#include "Libs/Array.h"

void loadArray();

int main()
{
    loadArray();
    return 0;
}

void loadArray()
{
    Array ints = Array();

    while (true)
    {
        printf("Array (Size: %d): ", ints.size());
        for (int i = 0; i < ints.size(); i++)
            printf("%d ", *((int *)ints.get(i)));
        printf("\n");
        printf("1] Push\n2] Pop\n3] Set\n4] Get\n5] Clear\n6] Shift\n7] Unshift\n8] Size\n\n9] Exit\n");
        printf("Choice: ");
        int choice;
        scanf("%d", &choice);
        printf("\n\n");

        bool shouldExit = false;

        switch (choice)
        {
        case 1:
        {
            int x;
            printf("Enter a number: ");
            scanf("%d", &x);
            ints.push(&x);
            printf("\n\n");
            break;
        }
        (...)
        }
        if (shouldExit)
            break;
    }
}

當我推送第一個值時,它成功地推送到數組中。 但是當我推送更多值時,初始值會簡單地被新的推送值替換。

Output (粘貼箱):

輸出圖像

為什么會這樣? 我真的很困惑。 任何幫助表示贊賞。

局部變量int x; 當其塊的執行結束時將消失,之后你不能取消引用指向它的指針。

您必須分配新區域來存儲值並推送其指針,而不是推送&x

ints.push(new int(x));

下一步將定義復制構造函數、賦值運算符和析構函數以正確處理數組(遵循三規則)並修復 memory 泄漏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM