今天第二个问题,第一个问题确实有帮助。
所以这是我的代码:
<controls:PageHeader x:Name="pageHeader" Text="Main Page" Padding="0,0,283,0">
<!-- place stretched, across top -->
<RelativePanel.AlignTopWithPanel>True</RelativePanel.AlignTopWithPanel>
<RelativePanel.AlignLeftWithPanel>True</RelativePanel.AlignLeftWithPanel>
<RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
<!-- secondary commands -->
<controls:PageHeader.SecondaryCommands>
<AppBarButton Click="{x:Bind ViewModel.GotoSettings}" Label="Settings" />
<AppBarButton Click="{x:Bind ViewModel.GotoPrivacy}" Label="Privacy" />
<AppBarButton Click="{x:Bind ViewModel.GotoAbout}" Label="About" />
</controls:PageHeader.SecondaryCommands>
</controls:PageHeader>
<AutoSuggestBox Margin="0,8,12,0" Width="270" QueryIcon="Find" PlaceholderText="Search">
<RelativePanel.AlignRightWithPanel>True</RelativePanel.AlignRightWithPanel>
</AutoSuggestBox>
我获取了Name,State,UID和Username以及VmPeak的信息。他们按照我想要的方式工作。但其他3个是我似乎无法使它们工作的问题,我无法弄清楚原因(完整路径,写入存储层和等待通道的字节)。所以我的问题是如何访问它们并打印信息。
答案 0 :(得分:1)
如alk所示,修改你的getWaitChannel()以为通道分配内存。当不需要频道数据时,您需要在以后释放内存。
char *getWaitChannel(int pid)
{
FILE* statusf4;
char path[40];
char buf4[100];
char *channel;
channel = malloc(1024);
/* Add error handling for malloc failure here */
snprintf(path, 40, "/proc/%d/stack", pid);
statusf4 = fopen(path, "r");
if(statusf4 == NULL)
return "";
while(fgets(buf4,sizeof buf4, statusf4) != NULL){
sscanf(buf4,"[<c0227f4e>] %s", channel);
return channel;
}
}
检查代码并查看是否有任何其他变量(例如fullpath)需要内存分配,并通过注释代码的某些部分来执行逐步调试以捕获错误。