uygargumus
04/10/2005, 20:40
Merhaba arkadaşlar proje dersim için yazdığım bir kod hakkında size danışacağım. Yapılan iş basit. Bir sınıf var ve bunun iki adet int dizisi var constructor da bu dizilere yer ayrılacak ve ilk değerler verilecek bunun için yazdığım kod şu şekilde
class Source :
public Shape
{
private:
int * skyline;
int * partIndice; //skyline dizisinin tuttugu parti gösteriyor
int usingPerCent;
bool used;
int numberOfPart; //sahip oldugu parça sayisini veriyor
public:
Source(int inputWidth = 0, int inputHeight = 0, int inputType = 0/*, string inputDefinition*/)
:Shape(inputWidth, inputHeight, inputType /*,inputDefinition*/),used(false),numberOfPart(0)
{
int i = 0;
skyline = new int[width];
partIndice = new int[width];
while(i < width)
{
skyline[i] = 0;
partIndice[i] = -1;
i++;
}
usingPerCent = 0;
}
Buradaki sorun şu bellekten new ile yer aldığım zaman sadece dizinin ilk indisine adres veriliyor diğer indislere erişilemiyor aynı zamanda while döngüsü içinde sadece sıfır indisli ilk elemana değer atanabiliyor. Sonraki döngülerde işlem yapılsa bile atma işlemi olmuyor. Ancak constructor içinde yerel bir değişken kullansam uygun biçimde çalışıyor. Aynı kod Visual C++ 6.0 da ise sorunsuzca çalışmakta
Acaba .NET üzerinde constructor ile bellek tahsisi farklı mı yapılıyor. Bu kodun kötü tarafı ne? yardım ederseniz çok sevinirim
class Source :
public Shape
{
private:
int * skyline;
int * partIndice; //skyline dizisinin tuttugu parti gösteriyor
int usingPerCent;
bool used;
int numberOfPart; //sahip oldugu parça sayisini veriyor
public:
Source(int inputWidth = 0, int inputHeight = 0, int inputType = 0/*, string inputDefinition*/)
:Shape(inputWidth, inputHeight, inputType /*,inputDefinition*/),used(false),numberOfPart(0)
{
int i = 0;
skyline = new int[width];
partIndice = new int[width];
while(i < width)
{
skyline[i] = 0;
partIndice[i] = -1;
i++;
}
usingPerCent = 0;
}
Buradaki sorun şu bellekten new ile yer aldığım zaman sadece dizinin ilk indisine adres veriliyor diğer indislere erişilemiyor aynı zamanda while döngüsü içinde sadece sıfır indisli ilk elemana değer atanabiliyor. Sonraki döngülerde işlem yapılsa bile atma işlemi olmuyor. Ancak constructor içinde yerel bir değişken kullansam uygun biçimde çalışıyor. Aynı kod Visual C++ 6.0 da ise sorunsuzca çalışmakta
Acaba .NET üzerinde constructor ile bellek tahsisi farklı mı yapılıyor. Bu kodun kötü tarafı ne? yardım ederseniz çok sevinirim