- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
*** glibc detected *** /home/ghoshs/workspace/Simulator/Debug/Simulator: double free or corruption (out): 0x00000000017e6030 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7e626)[0x7f34b8553626]
/lib/x86_64-linux-gnu/libc.so.6(fclose+0x155)[0x7f34b85432a5]
/home/ghoshs/workspace/Simulator/Debug/Simulator[0x40e7bf]
/home/ghoshs/workspace/Simulator/Debug/Simulator[0x40e94a]
/home/ghoshs/workspace/Simulator/Debug/Simulator[0x40e357]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f34b84f676d]
/home/ghoshs/workspace/Simulator/Debug/Simulator[0x405e19]
======= Memory map: ========
00400000-0128c000 r-xp 00000000 08:06 1576650 /home/ghoshs/workspace/Simulator/Debug/Simulator
0148b000-0148c000 r-xp 00e8b000 08:06 1576650 /home/ghoshs/workspace/Simulator/Debug/Simulator
0148c000-014bd000 rwxp 00e8c000 08:06 1576650 /home/ghoshs/workspace/Simulator/Debug/Simulator
014bd000-014c7000 rwxp 00000000 00:00 0
017e6000-01807000 rwxp 00000000 00:00 0 [heap]
7f34b84d5000-7f34b8688000 r-xp 00000000 08:06 4849816 /lib/x86_64-linux-gnu/libc-2.15.so
7f34b8688000-7f34b8887000 ---p 001b3000 08:06 4849816 /lib/x86_64-linux-gnu/libc-2.15.so
7f34b8887000-7f34b888b000 r-xp 001b2000 08:06 4849816 /lib/x86_64-linux-gnu/libc-2.15.so
7f34b888b000-7f34b888d000 rwxp 001b6000 08:06 4849816 /lib/x86_64-linux-gnu/libc-2.15.so
7f34b888d000-7f34b8892000 rwxp 00000000 00:00 0
7f34b8892000-7f34b88a7000 r-xp 00000000 08:06 4853364 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f34b88a7000-7f34b8aa6000 ---p 00015000 08:06 4853364 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f34b8aa6000-7f34b8aa7000 r-xp 00014000 08:06 4853364 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f34b8aa7000-7f34b8aa8000 rwxp 00015000 08:06 4853364 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f34b8aa8000-7f34b8ac0000 r-xp 00000000 08:06 4855760 /lib/x86_64-linux-gnu/libpthread-2.15.so
7f34b8ac0000-7f34b8cbf000 ---p 00018000 08:06 4855760 /lib/x86_64-linux-gnu/libpthread-2.15.so
7f34b8cbf000-7f34b8cc0000 r-xp 00017000 08:06 4855760 /lib/x86_64-linux-gnu/libpthread-2.15.so
7f34b8cc0000-7f34b8cc1000 rwxp 00018000 08:06 4855760 /lib/x86_64-linux-gnu/libpthread-2.15.so
7f34b8cc1000-7f34b8cc5000 rwxp 00000000 00:00 0
7f34b8cc5000-7f34b8dbe000 r-xp 00000000 08:06 4849815 /lib/x86_64-linux-gnu/libm-2.15.so
7f34b8dbe000-7f34b8fbd000 ---p 000f9000 08:06 4849815 /lib/x86_64-linux-gnu/libm-2.15.so
7f34b8fbd000-7f34b8fbe000 r-xp 000f8000 08:06 4849815 /lib/x86_64-linux-gnu/libm-2.15.so
7f34b8fbe000-7f34b8fbf000 rwxp 000f9000 08:06 4849815 /lib/x86_64-linux-gnu/libm-2.15.so
7f34b8fbf000-7f34b8fe1000 r-xp 00000000 08:06 4849818 /lib/x86_64-linux-gnu/ld-2.15.so
7f34b91bd000-7f34b91c1000 rwxp 00000000 00:00 0
7f34b91dd000-7f34b91e1000 rwxp 00000000 00:00 0
7f34b91e1000-7f34b91e2000 r-xp 00022000 08:06 4849818 /lib/x86_64-linux-gnu/ld-2.15.so
7f34b91e2000-7f34b91e4000 rwxp 00023000 08:06 4849818 /lib/x86_64-linux-gnu/ld-2.15.so
7fffc3f01000-7fffc3fab000 rwxp 00000000 00:00 0 [stack]
7fffc3fff000-7fffc4000000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
我在做一个简单的FILE* temp_dataset = fopen(dataset_filnames,"w");
经过几次写操作后,我用一个简单的方法关闭了它fclose(temp_dataset);
在这一点上,我得到了双重免费腐败错误。在函数中,我只是生成两个随机数,它们将充当源和目的地,算法将进一步使用它们来查找图表上的路线。但是那部分完全独立于这部分代码。 (抱歉,不相关的信息堆栈溢出不允许我发布问题。)
void generate_dataset(int number_of_src_dest,
char dataset_filnames[],NI* network_info, int k, int network_set,int dataset_num)
{
int i,j;
printf("Generating Dataset for the Network Set...\n");
sprintf(dataset_filnames,"src_dest_pair_#nodes_%d_#SDP_%d_NS_%d_DS_%d",NUMBER_OF_NODES,number_of_src_dest,network_set,dataset_num);
printf("in file.. %s\n",dataset_filnames);
int temp_topo[NUMBER_OF_NODES][NUMBER_OF_NODES];
copy_2D_array(NUMBER_OF_NODES,NUMBER_OF_NODES,temp_topo,network_info->topology);
FILE* temp_dataset = fopen(dataset_filnames,"w");
int number_of_source_destination_generated = 0;
int source_destination[_BIG_SIZE][2];
for (i = 0; i < NUMBER_OF_NODES; ++i)
{
for (j = 0; j < NUMBER_OF_NODES; ++j)
{
if(i != j)
{
int shortestpath[NUMBER_OF_NODES];
int dist = shortest_path(i,j,temp_topo,shortestpath);
int paths[K][NUMBER_OF_NODES];
initialize_two_d_array(K,NUMBER_OF_NODES,paths,-1);
if(dist>=percentage_of(PERCENTAGE_LOWER_LIMIT,compute_optical_reach()) &&
dist<=percentage_of(PERCENTAGE_UPPER_LIMIT,compute_optical_reach()))
{
int paths_generated = k_shortest_path(i,j,K,
paths,temp_topo,compute_optical_reach());
if(paths_generated>=K)
{
source_destination[number_of_source_destination_generated][0] = i;
source_destination[number_of_source_destination_generated][1] = j;
number_of_source_destination_generated ++;
}
}
}
}
}
if(number_of_source_destination_generated>=NUMBER_OF_SOURCE_DESTINATION)
{
int visited_demand[number_of_source_destination_generated];
initialize_one_d_array(number_of_source_destination_generated,visited_demand,0);
for (i = 0; i < NUMBER_OF_SOURCE_DESTINATION; ++i)
{
int next_demand = random_in_range(0,number_of_source_destination_generated);
while(visited_demand[next_demand])
next_demand = random_in_range(0,number_of_source_destination_generated);
visited_demand[next_demand] = 1;
fprintf(temp_dataset,"%d\t%d\n",source_destination[next_demand][0],source_destination[next_demand][1]);
}
}
else
{
printf("Number of Source-Destination Pairs Generated: %d\n",number_of_source_destination_generated);
printf("Cannot generate the required number of SD pairs\nExiting...");
exit(1);
}
printf("Number of Source-Destination Pairs Generated: %d\n",number_of_source_destination_generated);
printf("Freeing up memory and flushing all buffer...\n");
fclose(temp_dataset);
printf("Done Generating data-sets.\n");
}
我意识到当我打开文件时,NI
类型(struct
)的 network_info
中的数据被破坏了。 network
结构有一个表示网络的二维数组。打开文件后,我看到数组中引入了垃圾值。 network_info
的大小使用 (NI*) malloc(sizeof(NI*))
进行初始化。
最佳答案
根据我的经验,双重释放或损坏错误通常是代码中较早出现的问题的征兆。我注意到您有以下代码片段:
int number_of_source_destination_generated = 0;
int source_destination[NUMBER_OF_SOURCE_DESTINATION][2];
在一个循环中:
source_destination[number_of_source_destination_generated][0] = i;
source_destination[number_of_source_destination_generated][1] = j;
number_of_source_destination_generated ++;
您如何保证 number_of_source_destination_generated 始终小于 NUMBER_OF_SOURCE_DESTINATION?特别是你后来:
if(number_of_source_destination_generated>=NUMBER_OF_SOURCE_DESTINATION)
{
这是不产生错误的情况。这让我相信小写变量应该大于大写变量。所以,我相信这意味着您正在写入未分配给您想要的数组的内存。这可能会在以后引起问题,可能是您要问的问题。如果我这样做,我的实现不会总是向我提示,所以如果你的类似,你不能依赖编译器来捕获这些错误。
我仍然相当缺乏经验,所以对这个建议持怀疑态度(你总是应该如此)。
编辑:我刚刚点击了“显示更多评论”,这个问题已经得到解决。所以,这里没有什么新鲜事。
关于c - 双自由或腐败(出)fclose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065722/
在我的程序中,我可能会关闭一个已经关闭的文件。当我对一个已经关闭的文件执行 fclose 时会发生什么? 如果不能这样做,如何知道文件是关闭还是打开? 最佳答案 使用同一流调用 fclose 两次是未
为什么如果我们使用 fread() 读取文件并且不包含 fclose 来关闭相同的相同文件引用但它仍然有效。 但是,如果我们忘记在 fwrite 之后包含 fclose,那么它就不起作用。即没有写入文
我在 Linux 中运行程序时遇到段错误错误。在 AIX 中工作正常。 我在 gdb 中收到消息段错误... 程序接收信号SIGSEGV,段错误fclose@@GLIBC_2.2.5 () 来自/li
是否需要检查fclose的返回值?如果我们成功打开了一个文件,它关闭失败的可能性有多大? 最佳答案 当您fwrite到文件时,它实际上可能不会写入任何内容,它可能会保留在缓冲区中(FILE对象内部)。
假设我正在写入文件,但我想通过关闭机器电源来结束写入,这会是 fclose() 函数没有被调用的问题吗? FILE *f = fopen("file.txt", "w"); if (f == NULL
我正在尝试读取一个整数文件,其中包含文件中的整数个数作为第一个整数,但是当我在读取文件后尝试关闭该文件时,出现了段错误。 我读到,如果文件指针为空并且您尝试关闭它,则会出现段错误。但是,我在关闭它之前
我有以下 C++ 代码来将 shorts 写入 headless 音频文件: vectornShrtDecoded; nShrtDecoded.resize(iCountDecodedShorts);
我的程序有问题。使用函数 fclose() 后出现错误: "* Error in `./server': corrupted double-linked list: 0x000000000251a23
我在这段代码中遇到问题,它成功执行直到到达 fclose(fp) 语句,它崩溃了。 void read_file(const char *filename) { FILE *fp; i
为什么这个简单的函数会导致seg fault? int main(int argc, char** argv) { FILE* file1; file1 = fopen(argv[ar
每当我在最后使用 fclose(outputFile); 运行我的程序时,我都会收到错误消息。 glibc 检测到...损坏的双链表 不过,令人困惑的是,我在它的正上方有 fclose(inputFi
我最近构建了一个包装库 gorilla-audio 的 Ruby C 扩展。该库足够简单,代码干净,占用内存等。但是,当我尝试将库加载到 ruby 中时,它会抛出一个错误,内容如下: The pr
我正在编写一个函数 (*rwObjects()),它将读取格式化文件并保存它的字符串,一次一个对象。不幸的是,它对我的研究有限制 - stdio.h、stdlib.h 和 string.h 几乎是
我已经通过评论缩减了程序,缩减为: #include #include int main(int argc, char *argv[]) { FILE * in; in = fop
这个问题在这里已经有了答案: What happens if I don't call fclose() in a C program? (4 个答案) 关闭 7 年前。 根据我的阅读,fclose
我有两个函数。第一个函数是以写入模式打开一个文件并写入一些内容,然后关闭它。 FILE *fp = fopen("file.txt", "w"); //writing itnot file using
我尝试在 Linux 机器上使用 c++ fopen、fwrite、fflush 和 fclose 函数创建大约 4 GB 的文件,但我观察到 fclose() 函数需要很长时间才能关闭文件,大约需要
下面是 fclose 导致错误的源代码的一小部分?此函数并不总是被调用,在某些特定情况下会调用此函数。 int write_into_file (char * file_name) {
我一直在尝试在 C 中进行简单的文件处理,我想确保可以尝试使用此文件访问该文件 #include main() { CheckFile(); } int CheckFile() { i
是否需要检查fclose的返回值?如果我们成功打开了一个文件,它关闭失败的可能性有多大? 最佳答案 当您fwrite 到一个文件时,它实际上可能不会写任何东西,它可能会留在缓冲区中(在 FILE 对象
我是一名优秀的程序员,十分优秀!