我今天很难修复代码,然后我遇到类似的东西:
typedef struct {
int a;
int b;
int c;
int d;
char* word;
} mystruct;
int main(int argc, char **argv){
mystruct* structptr = malloc(sizeof(mystruct));
if (structptr==NULL) {
printf("ERROR!")
...
}
...
free(structptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码由于事实而给出了大量内存错误,这char* word
是一个可变长度的字符串,而malloc没有为它分配足够的内存.实际上它只是20 Bytes
为整体分配struct
.有没有解决这个问题的方法,而不是char*
像char word[50]
什么?
我正在努力提高代码效率.我有这样的事情:
typedef struct{
...
}MAP;
MAP* pPtr=NULL;
MAP* pTemp=NULL;
int iCount=0;
while (!boolean){
pTemp=(MAP*)realloc(pPtr,(iCount+1)*sizeof(MAP));
if (pTemp==NULL){
...
}
pPtr=pTemp;
...
iCount++;
}
Run Code Online (Sandbox Code Playgroud)
内存正在动态分配.我想减少realloc调用,使代码更有效.我想知道如果新大小等于旧大小,realloc将如何表现.电话会被忽略吗?
之前已经问过这个问题:如何从C++程序中重启Linux?
但是,没有一个答案似乎对我有用.
这是我的问题:
我有一个硬件上的程序.我可以以root用户身份登录并运行它而不会出现任何问题.但是,如果我以root priveleges身份登录为其他用户,程序执行正常,但不会重新启动.它只关闭当前的Telnet会话.
要重启,我已经习惯了system(reboot)
.到目前为止,我尝试过:
sync();
reboot(RB_POWER_OFF);
Run Code Online (Sandbox Code Playgroud)
和
execl("/sbin/reboot","reboot",NULL,NULL);
Run Code Online (Sandbox Code Playgroud)
无济于事.
(我不确定,如果我使用execl
得当.这是我第一次使用它.如果我搞砸了,请纠正我).
任何帮助,将不胜感激.
编辑:
/data/local/sbin # cat /etc/passwd
root:x:0:0:root:/root:/bin/sh
service:54zljpSAe:0:0:root:/root:/data/local/sbin/script
Run Code Online (Sandbox Code Playgroud)
如果我以服务身份登录,将运行"script".用户有一个列表选项可供选择.其中一个选项是运行上述程序.
编辑:
另外值得一提的是:脚本中的一个选项是重启系统.如果从脚本内部调用,它可以工作.但我想从程序中调用reboot.
我是固件开发人员,我通常用C或汇编开发固件.但是,我在嵌入式库中遇到了一个完全用C++实现的项目.现在我知道面向对象的语言可以在硬件层面上使用,但我想知道它们在开发嵌入式系统时不那么受欢迎.
我正在尝试使用UDP发送命令.接收器应该接收UDP数据报并回复.但是,我希望始终将回复发送到发件人的源端口.我知道如何解析端口(struct header并将指针移动到正确的位置......),但是,我正在寻找一个函数来返回整个接收帧,包括标题而不仅仅是数据报/数据.