我正在编写一个给我以下错误的函数:
/bin/sh: line 1: 15039 Bus error: 10 ( test/main.test )
make: *** [test] Error 138
我必须查找总线错误是什么,显然是当一个函数试图访问一个不存在的地址时?我一直在查看这个相对较短的函数,但看不到发生了什么。
#include <stddef.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
#include "../include/array_utils.h"
int array_new_random(int **data, int *n)
{
int i;
srand(time(NULL));
if(*data == 0){
*data = malloc(*n * sizeof(int));
}
for(i = 0; i < n; i++){
*data[i] = rand();
}
return n;
}
这是调用它的函数。
void test_array_new_random(void)
{
int *buffer = NULL;
int len = 100;
int ret;
t_init();
ret = array_new_random(&buffer, &len);
t_assert(len, ret);
t_assert(100, len);
free(buffer);
t_complete();
}
以下是一些已被调用的其他函数。我不认为它们那么重要,因为代码似乎在到达它们之前就崩溃了,但我可能是错的。
void t_assert(int expected, int received)
{
if (expected != received) {
snprintf(buffer, sizeof(buffer), "EXPECTED %d, GOT %d.", expected, received);
t_fail_with_err(buffer);
}
return;
}
void t_init()
{
tests_status = PASS;
test_no++;
printf("STARTING TEST %d\n", test_no);
return;
}
void t_complete()
{
if (tests_status == PASS) {
printf("PASSED TEST %d.\n", test_no);
passed++;
}
}
void t_fail_with_err(char *err)
{
fprintf(stderr, "FAILED TEST %d: %s\n", test_no, err);
tests_status = FAIL;
tests_overall_status = FAIL;
return;
}
因为我似乎正在编写一个用于通过测试的函数,所以您可能正确地猜到这是一个家庭作业。
编辑:所以,一个问题是我正在使用*data[i]
我应该使用的地方(*data)[i]
。但是,我现在收到此错误:
/bin/sh: line 1: 15126 Segmentation fault: 11 ( test/main.test )
make: *** [test] Error 139