这段代码给出了一个分段错误但是如果测试函数体直接写在main函数中就可以正常工作.那么,您认为导致这个问题的是什么?
分段故障:
#include<stdio.h>
int test()
{
int i=0;
int *p;
printf("pass\n");
for (i = 0; i < 24; i++)
{
printf("%d\n",i);
*(p+i) = i;
printf("%d\n",*(p+i));
}
return 1;
}
int main() {
int x = 0;
x = test();
}
Run Code Online (Sandbox Code Playgroud)
工作正常:
int main() {
int i=0;
int *p;
printf("pass\n");
for (i = 0; i < 24; i++)
{
printf("%d\n",i);
*(p+i) = i;
printf("%d\n",*(p+i));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:在给我一堆投票之前,请尝试代码.我知道编程很糟糕.我正在评估一些C代码exames并且有一个学生写了这个.是的,不是很好,但事实上工作版本实际上正在运行.
当我发送标志-h或-H时,为什么会出现分段错误.
bool parse_command(int argc, char **argv, bool *header, char **fileName)
{
if (!argv)
return false;
bool *flagh = false;
bool *flagH = false;
char *options = "Hh";
int opt = 0;
while ( (opt = getopt(argc, argv, options ) ) != -1)
{
printf("HELLO");
switch (opt)
{
case 'h':
*flagh = true;
break;
case 'H':
*flagH = true;
break;
default:
usage_p1();
return false;
}
}
printf("%d", opt);
// Implement this function
return true;
}
Run Code Online (Sandbox Code Playgroud) 任何人都可以向我解释为什么以下代码导致分段错误?buff应足够长,可容纳128个字符.
int main () {
char buff[16384];
char buff2[128];
sprintf(buff2, "MinPer(PatternName_Equal27_xxxxxxx_MasterPatSetup.PatternName_Equal27_xxxxxxx__default_WFT___WFTRef.ActualT0Period.UserPeriod_2_1)" );
strcat(buff, buff2);
std::cout << buff2 << endl;
std::cout << buff << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 为什么*y = 20只有启动两个“空”线程时,这段代码才会导致分段错误?
int main(int argc, char **argv) {
int x = 10;
int *y;
*y = 20;
std::thread t1([]{});
std::thread t2([]{});
t1.join();
t2.join();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我定义了两个结构。点和三角形,我想在主函数中用随机值初始化它们。但是这一行的编译器出了问题,停了下来。问题是什么?
#include <cmath>
#include <ctime>
struct Point{
double x;
double y;
double z;
};
struct Triangle{
Point* a;
Point* b;
Point* c;
};
int main() {
Triangle t1;
srand(time(0));
t1.a->x=10.0*(rand()/RAND_MAX)-5; //this line gives Segmentation fault
t1.a->y=10.0*(rand()/RAND_MAX)-5;
t1.a->z=10.0*(rand()/RAND_MAX)-5;
t1.b->x=10.0*(rand()/RAND_MAX)-5;
t1.b->y=10.0*(rand()/RAND_MAX)-5;
t1.b->z=10.0*(rand()/RAND_MAX)-5;
t1.c->x=10.0*(rand()/RAND_MAX)-5;
t1.c->y=10.0*(rand()/RAND_MAX)-5;
t1.c->z=10.0*(rand()/RAND_MAX)-5;
}
Run Code Online (Sandbox Code Playgroud) 我正在将2-d char数组转换为2-d int数组,while如果\0或者\n进入字符串,我需要突破循环.此代码给出了分段错误.Arrayis的定义和索引小于1000并且已经存储了2-d char数组tempCharArray.我的代码有什么问题?
//Array[tempCount][1000];
for(int i=0;i<tempCount;i++)
{
strtok(tempCharArray[i]," ");
while(tempCharArray[i]!="\0" || tempCharArray[i]!="\n")
{
Array[i][arrayindex]=atoi(strtok(NULL," ");
arrayindex++;
}
arrayindex=0;
}
Run Code Online (Sandbox Code Playgroud) #include<stdio.h>
int main()
{
char *str;
gets(str);
puts(str);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
output =分段错误
为什么它会给出分段错误?
在这个代码中使用 a--和b++显示分段错误,但如果给予--a和++b它的工作,为什么?!
add(a,b)
{
if (a==0)
return b;
else
return add(a--,b++); //why this line didn't work??!
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
void func(uint8 *var) {
uint8 tempvar;
if (var)
var = &tempvar;
*var = 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下方法调用函数:
func(NULL);
Run Code Online (Sandbox Code Playgroud)
代码在"*var = 0;"行给出了分段错误 因为var仍然指向内存地址0x0.我不明白为什么我对临时变量的赋值不起作用!
int main()
{
int *a={1,2,3}; //which value is stored and where it is stored
printf("\n%d",*a); //crashes here
}
Run Code Online (Sandbox Code Playgroud)
请解释上述原因导致崩溃的原因.