搜索了一段时间,但我无法弄清楚为什么会引起总线错误.
任何帮助将非常感激.
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct(); // just mallocs and returns
a->pages.insert(5);
...
}
Run Code Online (Sandbox Code Playgroud) 由于我对将指针类型内存分配给指针的过分理解,以下原因导致对barrier_create的调用出现总线错误("hi"从不打印).
typedef struct barrier barrier_t;
typedef struct barrier *barrier_p;
barrier_p test_barrier_p;
int main(int argc, char *argv[]) {
barrier_create(*test_barrier_p);
}
int barrier_create(barrier_p *barrier_pointer) {
printf("hi\n");
barrier_p old_barrier, new_barrier;
int count;
old_barrier = (barrier_p) *barrier_pointer;
new_barrier = (barrier_p) malloc(sizeof(*new_barrier));
count = pthread_mutex_init(&new_barrier->lock, NULL);
new_barrier->is_valid = VALID_BARRIER;
new_barrier->counter = 0;
new_barrier->release_flag = 0;
*barrier_pointer = new_barrier;
return HAPPY_HAPPY_JOY_JOY;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么或输入错误?
我想了解为什么我在使用此代码时出现总线错误.
int main()
{
int p=34;
int *pp= (int *) ((char *)&p+1);
cout<<*pp<<"\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在玩C,我遇到了这个错误:
#include <stdio.h>
int main ()
{
char* foo;
scanf("%s", foo);
printf("entered %s", foo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
scanf取指针,foo是指针,但我得到总线错误.我怎样才能使它工作?
导致EXC_BAD_ACCESS信号的测试程序.为什么这会导致总线错误?我想将'HI'改为'fI'.
//BUS ERROR TEST
#include <iostream>
void test(char *text)
{
text[0] = 'f';
}
int main()
{
char *text = (char *)"HI";
test(text);
std::cout << text << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 下面的代码在一个程序中运行良好,并在另一个程序中导致总线错误
char *temp1;
temp1=(char*)malloc(2);
for(b=3;b>=0;b--)
{
sprintf(temp1,"%02x",s_ip[b]);
string temp2(temp1);
temp.append(temp2);
}
Run Code Online (Sandbox Code Playgroud)
s_ip [b]的类型为byte,temp是一个字符串.导致此总线错误的原因是什么?而且,这种奇怪行为的原因是什么?
我觉得在一个字符串中用C替换两个字符会让人感到困惑.当我将它设置为数组时,它会很好用:
char strBase[8] = "acbdefg";
在这种情况下,我可以交换任何角色.但是当我将其设置为字符串时,它会触发总线错误:
char *strBase = "acbdefg";
非常感谢任何人都可以解释它或给我一些暗示!