![](/img/trans.png)
[英]Exchange structures (envolving pointers to other structures) between C and C#
[英]Pointers in structures in c#
我正在使用一個名為avl_node的結構,代碼如下:
unsafe struct avl_node
{
Studentdb data;
avl_node *left;
avl_node *right;
int height;
};
我想在名為avl_methods的類中創建一個功能Height 。請參見下面的代碼:
class avl_methods
{
public unsafe int height(avl_node *a_node)
{
if(a_node==NULL)
{
return -1;
}
else
{
return a_node->height;
}
}
}
我現在遇到的錯誤是無法獲取地址,獲取其大小或聲明一個指向托管類型的指針。 盡管我在項目中允許使用不安全的代碼。 請幫我。 我真的想在結構中使用指針,因為這是我的項目的要求。 我正在使用WPF 4.0開發桌面應用程序...
希望能有更好的回應!
您正在使用
Studentdb
{
int student_id;
String Student_name;
Date dob; char gender;
String department;
};
字符串是.NET中的引用類型,對於結構指針是non-blittable
的。
顯然, Studentdb
的String
ans char
導致了此問題。 要了解原因,您需要了解垃圾收集器的工作方式。 它通過跟蹤對對象的引用來發現垃圾。
因此,編譯器可以提前告知垃圾回收器將永遠無法看到字符串引用。
唯一的解決方法是嚴格限制自己使用值類型。 對字符串執行此操作的唯一方法是在unmanaged memory
分配它們
該問題必須與Studentdb結構有關。 我認為從您聲明avl_node的地方看不到它
此代碼段引發了您遇到的錯誤
unsafe struct avl_node
{
Studentdb data;
avl_node* left;
avl_node* right;
int height;
};
//unsafe struct Studentdb
//{
// int height;
//};
還行吧
unsafe struct avl_node
{
Studentdb data;
avl_node* left;
avl_node* right;
int height;
};
unsafe struct Studentdb
{
int height;
};
您發布的代碼中的指針聲明沒有問題。
UPDATE
這是結構Studentdb的OP定義,當用戶首次發布時我還沒有定義
struct Studentdb
{
int student_id;
String Student_name;
Date dob;
char gender;
String department;
};
您還可以將結構更改為以下形式:
struct Studentdb
{
int student_id;
char * []Student_name;
char*[] dob;
char gender;
char*[] department;
};
由於string是clr類型,不能與指針一起使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.