*** Đã phát hiện glibc *** /home/ghoshs/workspace/Simulator/Debug/Simulator: trống gấp đôi hoặc bị hỏng (ra): 0x00000000017e6030 ***
======= Quay lại: =========
/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]
======= Bản đồ bộ nhớ: ========
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 [đống]
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 [ngăn xếp]
7fffc3fff000-7fffc4000000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Tôi đang làm một việc đơn giảnFILE* temp_dataset = fopen(dataset_filnames,"w");
Sau một vài thao tác ghi, tôi đã đóng nó bằng một phương pháp đơn giảnfclose(temp_dataset);
Tại thời điểm này tôi nhận được một lỗi tham nhũng miễn phí gấp đôi. Trong hàm, tôi chỉ tạo hai số ngẫu nhiên sẽ đóng vai trò là nguồn và đích và thuật toán sẽ tiếp tục sử dụng chúng để tìm tuyến đường trên biểu đồ. Nhưng phần đó hoàn toàn độc lập với phần mã này. (Xin lỗi, Stack Overflow không cho phép tôi đăng câu hỏi về thông tin không liên quan.)
void generate_dataset(int number_of_src_dest,
char tập dữ liệu_filnames[],NI* network_info, int k, int network_set,int tập dữ liệu_num)
{
int i,j;
printf("Đang tạo tập dữ liệu cho bộ mạng...\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("trong 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->cấu trúc liên kết);
FILE* temp_dataset = fopen(dataset_filnames,"w");
int number_of_source_destination_generated = 0;
int source_destination[_BIG_SIZE][2];
cho (i = 0; tôi < NUMBER_OF_NODES; ++i)
{
vì (j = 0; j < NUMBER_OF_NODES; ++j)
{
nếu (tôi != j)
{
int đường đi ngắn nhất[NUMBER_OF_NODES];
int dist = đường dẫn ngắn nhất(i,j,temp_topo,đường dẫn ngắn nhất);
đường dẫn int[K][NUMBER_OF_NODES];
khởi tạo_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 path_generated = k_shortest_path(i,j,K,
đường dẫn,temp_topo,compute_optical_reach());
if(paths_generated>=K)
{
nguồn_destination[number_of_source_destination_generated][0] = i;
nguồn_destination[number_of_source_destination_generated][1] = j;
số_of_source_destination_generated++;
}
}
}
}
}
if(number_of_source_destination_generated>=NUMBER_OF_SOURCE_DESTINATION)
{
int đã truy cập_demand[number_of_source_destination_generated];
khởi tạo_one_d_array(number_of_source_destination_generated,visited_demand,0);
cho (i = 0; tô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);
đã truy cập_demand[next_demand] = 1;
fprintf(temp_dataset,"%d\t%d\n",source_destination[next_demand][0],source_destination[next_demand][1]);
}
}
khác
{
printf("Số cặp nguồn-đích được tạo: %d\n",number_of_source_destination_generated);
printf("Không thể tạo đủ số cặp SD theo yêu cầu\nĐang thoát...");
exit(1);
}
printf("Số cặp nguồn-đích được tạo: %d\n",number_of_source_destination_generated);
printf("Giải phóng bộ nhớ và xóa tất cả bộ đệm...\n");
fclose(temp_dataset);
printf("Hoàn tất việc tạo tập dữ liệu.\n");
}
Tôi nhận ra rằng khi tôi mở tập tin,NI
kiểu(struct
)của thông tin mạng
Dữ liệu trong bị hỏng. mạng
Cấu trúc có một mảng hai chiều đại diện cho mạng. Sau khi mở file tôi thấy các giá trị rác được đưa vào mảng. thông tin mạng
kích thước sử dụng (NI*) malloc(sizeof(NI*))
Thực hiện khởi tạo.
Theo kinh nghiệm của tôi, lỗi trống kép hoặc lỗi hỏng thường là triệu chứng của các sự cố xảy ra trước đó trong mã. Tôi nhận thấy bạn có đoạn mã sau:
int number_of_source_destination_generated = 0;
int source_destination[NUMBER_OF_SOURCE_DESTINATION][2];
Trong một vòng lặp:
nguồn_destination[number_of_source_destination_generated][0] = i;
nguồn_destination[number_of_source_destination_generated][1] = j;
số_of_source_destination_generated++;
Làm cách nào để đảm bảo rằng số_of_source_destination_được tạo luôn nhỏ hơn NUMBER_OF_SOURCE_DESTINATION? Đặc biệt là sau bạn:
if(number_of_source_destination_generated>=NUMBER_OF_SOURCE_DESTINATION)
{
Đây là trường hợp không có lỗi nào được tạo ra. Điều này khiến tôi tin rằng các biến chữ thường phải lớn hơn các biến chữ hoa. Vì vậy, tôi tin rằng điều này có nghĩa là bạn đang ghi vào bộ nhớ không được phân bổ cho mảng bạn muốn. Điều này có thể gây ra vấn đề sau này và có thể là điều bạn muốn hỏi. Việc triển khai của tôi không phải lúc nào cũng nhắc tôi nếu tôi thực hiện việc này, vì vậy nếu cách triển khai của bạn tương tự, bạn không thể dựa vào trình biên dịch để phát hiện những lỗi này.
Tôi vẫn còn khá thiếu kinh nghiệm, vì vậy hãy tin tưởng lời khuyên này (bạn luôn nên làm như vậy).
EDIT: Tôi vừa nhấp vào "Hiển thị thêm nhận xét" và sự cố đã được giải quyết. Vì vậy, không có gì mới ở đây.
Tôi là một lập trình viên xuất sắc, rất giỏi!