我有一个任意值的数组,所以我将它定义为一个void指针数组,所以我可以指向任何类型的信息(如int字符数组等).但是,我如何实际分配int给它?
以这些初始化为例:
void* data[10];
int x = 100;
Run Code Online (Sandbox Code Playgroud)
我的直觉会想到这一点,但这会产生编译错误:
data[0] = malloc(sizeof(int));
*(data[0]) = x;
Run Code Online (Sandbox Code Playgroud)
我也考虑过使用&x,但我会考虑一个局部变量的地址,这个(据我的理解)将在退出程序后被清除.所以,如果我有一个局部变量x,我如何正确地将它变为void指针类型的变量?
与我之前的问题非常相关,但我发现这是一个单独的问题,我无法找到一个可靠的答案.
是否超出范围释放(字符)数组使用的内存?
一个例子:
void method1()
{
char str[10];
// manipulate str
}
Run Code Online (Sandbox Code Playgroud)
所以在method1调用之后,str(10字节)使用的内存是否被释放,或者我是否需要在此上显式调用free?
我的直觉告诉我这只是一个简单的原始类型数组,因此它会自动释放.我有点怀疑,因为在C中你不能假设任何东西被自动释放.
我对Windows Mobile(使用C#和紧凑框架)开发有点新,所以我有点不确定如何做到这一点.用户必须以类似向导的方式浏览多页信息.一开始就有一个登录窗口.
我将如何实现这一目标?我是否会为每个页面设置不同的用户控件并根据请求创建/显示和销毁/隐藏它们?或者我是否需要创建不同的表单并以某种方式显示这些?
编辑(来自与OP不同的用户)
由于我还没有找到一个很好的解决方案,一些答案的链接在Windows Mobile 6.5中无法使用我开始赏金
这看起来很有前景,但可以为移动6.5而构建
http://weblogs.asp.net/justin_rogers/articles/117859.aspx
http://www.codeproject.com/KB/dialog/WizardForm.aspx
http://www.codeproject.com/KB/miscctrl/DesignTimeWizard.aspx
http://winformswizard.codeplex.com/
http://www.differentpla.net/content/2005/02/implementing-wizard-c(与上述相同,但早期的工作)
假设我有一个类A可以触发一个名为X的事件.现在我有一个B类,在一个方法中我得到一个实例到A并将事件绑定到B中的一个处理程序:
public void BindEvent(A a)
{
a.X += AEventHandler;
}
Run Code Online (Sandbox Code Playgroud)
我有三个问题.
当我现在将对B实例的引用设置为null时,它不会被垃圾收集,因为垃圾收集器认为它仍然在使用(因此在内存中保留了无用且可能干扰的B副本).
当我有另一个对象c(C类)时,我有一个名为a的引用("this.a = new A()").然后我调用"b.BindEvent(this.a)",在c中我将a的引用设置为null("this.a = null").这会将A的副本保存在内存中,因为它是通过b中的事件引用的吗?
如果其中任何一个或两个都是如此,我怎样才能最好地规避这些问题呢?如果我有一个事件处理程序的完整列表(比如"a.SomeEvent + = SomeMethod"这样的10行),我应该再次清理它们("a.SomeEvent - = SomeMethod").我应该在代码中的哪个时间或地点做这些事情?
嗯,它有点模糊,但我不知道如何以更好的方式解释.如果我需要解释更详细的内容,请发表评论.
在我的Windows Mobile .NET应用程序中,我有一个简单的对象数组,其中包含我想要在DataGrid中显示的数据.为此,我只需致电:
myDataGrid.DataSource = myArray;
这有效,但我遇到了问题:它使用所有属性作为列,并使用属性的名称作为列标题.我无法弄清楚如何自定义两件事:
选择应将哪个属性子集显示为列(例如,我有一个ID,名称和值属性,我只想显示名称和值);
重命名列标题以使其更有意义(例如,如果属性被称为ID,则显示列标题为"Number").
这有可能吗?
如上所述,这是在Windows Mobile .NET(版本2)应用程序中.
我正在用C实现一个非常非常基本的组件系统,但现在我想要"动态"调用某些函数.设置非常简单:主程序只是一个无限循环,其中检查一些条件,并为每个启用的组件调用"进程"函数.
例如,现在它的工作原理如下:
while (1) {
input_process();
network_process();
graphics_process();
}
Run Code Online (Sandbox Code Playgroud)
但我想将它分成单独的组件,并以某种方式在中心位置定义使用哪些部件.这可以通过简单的定义来完成,如下所示:
#define HAS_NETWORK
...
while (1) {
input_process();
#ifdef HAS_NETWORK
network_process();
#endif
graphics_process();
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,1或者只有少数组件是正常的,但是如果我想在未来对所有这些(输入,网络和图形)和其他组件这样做,我将不得不将#ifdefs单独放入他们每个人都有,这很乏味.
在伪代码中,我想要完成的是以下内容:
components = {'input', 'network', 'graphics'}
...
foreach component in components
execute component_process()
Run Code Online (Sandbox Code Playgroud)
这样,组件可以在将来轻松添加.我不介意检查是在编译时还是在运行时完成(虽然我显然更喜欢编译时,但我可以想象运行时更容易实现).我不知道怎么开始.
我只是想知道,在下面的方案中,是在执行了method1之后释放的'stringvar'所使用的内存?
// Just some method
void method2(char* str)
{
// Allocate 10 characters for str
str = malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
method2(stringvar);
// Is the memory freed hereafter, or do I need to call free()?
}
Run Code Online (Sandbox Code Playgroud)
我问,因为如果我在method1的末尾添加一个'free(stringvar)',我会得到一个警告,即stringvar在method1中是单元化的(这是真的).