簡體   English   中英

動態數組在構造函數中崩潰

[英]Dynamic array crashing at constructor

我正在嘗試為教育目的實現動態字符串數組。 我遇到的問題是,每當我嘗試向構造函數中的空數組添加字符串時,程序就會崩潰。

Array::Array(string dir, string dim)
{
   size = 0;
   ptr = new string[size + 1];
   ptr[size] = dir;
   size++;
   ptr[size] = dim;
   size++;
}

我在頭文件中聲明了int大小和字符串* ptr。 我原本以為這是一個越界問題,但是在看了這篇文章之后 ,我將初始分配固定為size + 1,但是持久性問題似乎證明是相反的。

更改size的值不會更改數組的大小。

您分配一個大小為1的數組。然后,向該數組的第一個(唯一)元素分配一些內容。 然后,您將某些東西分配給該數組的第二個元素-但該數組只有一個元素。

另請注意,使用new不會分配動態數組。 分配后,大小將無法更改。

Sid S所述 ,“更改size的值不會更改數組的大小。”

對於您的“效率低下”問題, PaulMcKenzieDaniel H的想法反映出一個常見的技巧是使用加倍策略 請參閱以下C代碼以獲取一個簡單的想法:

#include <stdlib.h>

struct MyArray {
    int capacity;
    int size;
    int *data;
}

/* any other functions you would use, eg: create, destroy of MyArray */     

void push(struct MyArray myarray, int n) {

    if (size == capacity) {
        capacity *= 2;
        data = realloc(data, capacity*sizeof(int));
    }

    /* add the element to the end of data and increase size */
}

這樣,您不必每次都添加元素就進行重新realloc ,而是平均可以減少運行時間。

這里可以找到有關倍增策略的詳細攤銷分析。

代替string使用pointer並在每次不需要0++時動態分配內存。

 Array :: Array(char *dir,char *dim)
    {
            int l1,l2;
            l1=strlen(dir);
            l2=strlen(dim);
            /**assume  n1 & n2 are data member of "Array" class.**/
            n1=new char[l1+1];// allocating memory dynamically
            n2=new char[l2+1];
    }

希望對您有所幫助。

暫無
暫無

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

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