我写了一个简单的python程序
l=[1,2,3,0,0,1]
for i in range(0,len(l)):
if l[i]==0:
l.pop(i)
Run Code Online (Sandbox Code Playgroud)
这给了我错误'列表索引超出范围'在线 if l[i]==0:
经过调试后,我可以发现i它正在增加并且列表正在减少.
但是,我有循环终止条件i < len(l).那我为什么会收到这样的错误呢?
我正在研究Linux环境.我有两个'C'源包train和test_train.
现在我想用gprof生成一个调用图,它显示了主程序中函数的调用顺序以及libtrain.so中的函数调用顺序.
我正在使用-pg选项编译和链接两个包,调试级别为o0.在我执行./train-test之后,生成gmon.out.然后我做:
$ gprof -q ./train-test gmon.out
Run Code Online (Sandbox Code Playgroud)
这里,输出显示列车测试中的函数调用图,但不显示libtrain.so中的调用图
可能是什么问题呢 ?
这是来自Linux手册页的代码:
#include <stdio.h>
#include <stdlib.h>
extern char etext, edata, end;
int main() {
printf("First address past:\n");
printf(" program text (etext) %10p\n", &etext);
printf(" initialized data (edata) %10p\n", &edata);
printf(" uninitialized data (end) %10p\n", &end);
exit(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud)
运行时,下面的程序产生如下输出:
$ ./a.out
First address past:
program text (etext) 0x8048568
initialized data (edata) 0x804a01c
uninitialized data (end) 0x804a024
Run Code Online (Sandbox Code Playgroud)
在哪里etext,edata end界定?如何为这些符号赋值?它是由链接器还是别的?
Linux中是否有任何软件可以在多核或分布式系统上并行编译包含大量文件的源代码.像gcc或xserver这样的库需要很长时间才能在unicore/dual机器上进行编译,而且大多数情况下,当你需要大量的重新编译时它会令人沮丧.是否有任何并行编译此类源代码的技术?
我在以下C代码中得到一个奇怪的结果.
int main()
{
int *p = (int *) malloc(100);
p[120] = 5;
printf("\n %d", p[120]);
}
Run Code Online (Sandbox Code Playgroud)
由于我只分配了100个字节,因此该代码应该导致分段错误.但是,它打印'5'并且不会给出任何运行时错误.有人可以解释原因吗?