我正在做的家庭作業項目使用靜態和動態數組。然而,我還沒有實現動態數組,這是一個奇怪的差異,試圖獲得我的靜態數組的長度。試圖避免分段錯誤,但我的輸出看起來很奇怪(C++)
我用了一系列的cout語句,試圖找出什麼是給我一個分段錯誤,因爲該過程看起來簡單。我發現在我的驅動程序中,它正在計算正確的範圍和長度,但是一旦我將該數組傳遞到用戶定義的類函數中,在同一個數組上執行的相同語句就會得到不同的結果。
我的司機功能:
using namespace std;
#include <iostream>
#include "/user/cse232/Projects/project07.string.h"
int main()
{
const char string1[] = {'a', 'b', 'c', 'd', 'e', 'f'};
String test1();
cout << "Size of array: " << sizeof(string1) << endl;
cout << "Size of item in array: " << sizeof(char) << endl;
cout << "Length of array: " << (sizeof(string1)/sizeof(char)) << endl;
cout << "Range of array" << (sizeof(string1)/sizeof(char))-1 << endl << endl;
String test2(string1);
}
在運行的時候,我從驅動器的輸出:
Size of array: 6
Size of item in array: 1
Length of array: 6
Range of array5
我的支持文件:
/* Implementation file for type "String" */
using namespace std;
#include <iostream>
#include "/user/cse232/Projects/project07.string.h"
String::String(const char Input[])
{
cout << "Size of array: " << sizeof(Input) << endl;
cout << "Size of item in array: " << sizeof(char) << endl;
cout << "Length of array: " << (sizeof(Input)/sizeof(char)) << endl;
cout << "Range of array" << (sizeof(Input)/sizeof(char))-1 << endl << endl;
/* Bunch of reallocation stuff that is commented out
for the time being, unimportant*/
}
String::~String()
{
Capacity = 0;
Length = 0;
Mem = NULL;
}
這裏是輸出I從支持文件中獲得,
Size of array: 4
Size of item in array: 1
Length of array: 4
Range of array3
這顯然是不正確的。如果有幫助,這是頭文件(省略未實現的函數)。它是不可改變的:
/******************************************************************************
Project #7 -- Interface file for type "String"
******************************************************************************/
#ifndef STRING_
#define STRING_
using namespace std;
#include <iostream>
class String
{
private:
unsigned Capacity; // Number of memory locations reserved
unsigned Length; // Number of memory locations in use
char * Mem; // Pointer to memory to hold characters
public:
// Construct empty string
//
String()
{
Capacity = 0;
Length = 0;
Mem = NULL;
}
// Destroy string
//
~String();
// Construct string by copying existing string
//
String(const String&);
// Construct string by copying C-style character string
//
String(const char[]);
#endif
我最大的問題是爲什麼我得到兩個單獨的輸出。第一個是我在分配內存時需要使用的一個;否則我會遇到分段錯誤。任何人都可以提供意見
我測試的另一件事是打印輸入在Input [0],Input [1]等支持文件中,它識別出Input [5] ='f',但它並沒有計算出與驅動文件中的數組長度相同的長度和範圍,即使數組相等 – user212562 2010-11-04 17:54:08
請注意,'String test1()'不會**創建一個String對象,它反而會向前聲明一個返回String的函數,並且不會接受任何參數。 String test1;'。 – 2010-11-04 18:26:55