Tag: segmentation fault

strtok和分段错误的问题

我有两个辅助函数来分解十进制价格格式的字符串,即。 “23.00”,“2.30” 考虑一下: char price[4] = “2.20”; unsigned getDollars(char *price) { return atoi(strtok(price, “.”)); } unsigned getCents(char *price) { strtok(price, “.”); return atoi(strtok(NULL, “.”)); } 现在,当我运行以下时,我得到一个分段错误: printf(“%u\n”, getDollars(string)); printf(“%u\n”, getCents(string)); 然而,当我单独运行它们而没有一个跟随另一个时,它们工作正常。 我在这里想念的是什么? 我是否必须进行某种重置strtok? 我的解决方案 根据我在下面选择的答案获得的关于strtok的知识,我更改了辅助函数的实现,以便它们首先复制传入的字符串,从而屏蔽原始字符串并防止出现此问题: #define MAX_PRICE_LEN 5 /* Assumes no prices goes over 99.99 */ unsigned getDollars(char *price) { /* Copy the string to […]

变量声明导致分段错误

我不明白程序中出现分段错误的原因。 代码可在此处获得 在第29行,我声明了一个PclImage变量,使用typedef定义,类似于struct数组。 PclImage类型的定义如下(来自src / libMyKinect.h文件): typedef struct { int valid; float x; float y; float z; unsigned char blue; unsigned char green; unsigned char red; } Point3d; typedef Point3d PclImage[480][640]; 该程序运行良好,但是当我声明第二个PclImage ,我一启动程序就会出现分段错误。 例如,如果在第一个文件的第30行,我添加了PclImage bgPcl; 程序立即崩溃。 谁能帮我?

使用strtok_r时出现分段错误

任何人都可以解释为什么我在下面的例子中得到分段错误? #include #include int main(void) { char *hello = “Hello World, Let me live.”; char *tokens[50]; strtok_r(hello, ” ,”, tokens); int i = 0; while(i < 5) { printf("%s\n", tokens[i++]); } }

为什么修改字符串的代码不起作用?

对于c风格的字符串,如何将字符指针指向的内存地址赋予char? 例如,在下面的示例中,我想将num更改为“123456”,因此我尝试将p设置为“0”所在的数字,并尝试用“4”覆盖它。 谢谢。 #include #include int main() { char* num = (char*)malloc(100); char* p = num; num = “123056”; p = p+3; //set pointer to where ‘4’ should be p = ‘4’; printf(“%s\n”, num ); return 0; }

初始化数组时出现Seg Fault

我正在上课,并遇到分段错误。 根据我的理解,当您访问尚未分配的内存或超出边界时,应该发生seg错误。 ‘当然我要做的就是初始化一个数组(虽然相当大) 我只是误解了如何解析二维数组? 错误放置绑定正是导致seg错误的原因 – 我在使用嵌套for-loop时错了吗? 教授提供了时钟function,所以我希望这不是问题所在。 我在Cygwin中运行此代码,这可能是问题吗? 源代码如下。 也使用c99标准。 要非常清楚:我正在寻找帮助理解(并最终修复)我的代码产生seg错误的原因。 #include #include int main(void){ //first define the array and two doubles to count elapsed seconds. double rowMajor, colMajor; rowMajor = colMajor = 0; int majorArray [1000][1000] = {}; clock_t start, end; //set it up to perform the test 100 times. for(int k = […]

为什么我的GTK +信号回调会出现分段错误?

我正在尝试测量GTK标签的大小: #include static void map_event(GtkWidget *window, gpointer lab) { g_print( “In the callback..\n” ); GtkWidget *label = GTK_WIDGET(lab); g_print( “Everything is ok..\n” ); } static void activate (GtkApplication* app, gpointer user_data) { GtkWidget *window = gtk_application_window_new (app); gtk_window_set_title (GTK_WINDOW (window), “Window1”); gtk_window_set_default_size (GTK_WINDOW (window), 200, 280); GtkWidget *grid = gtk_grid_new (); gtk_container_add (GTK_CONTAINER (window), grid); […]

Malloc,免费和分段错误

我不明白为什么在这段代码中,对“free”的调用会导致分段错误: #include #include #include char *char_arr_allocator(int length); int main(int argc, char* argv[0]){ char* stringa = NULL; stringa = char_arr_allocator(100); printf(“stringa address: %p\n”, stringa); // same address as “arr” printf(“stringa: %s\n”,stringa); //free(stringa); return 0; } char *char_arr_allocator(int length) { char *arr; arr = malloc(length*sizeof(char)); arr = “xxxxxxx”; printf(“arr address: %p\n”, arr); // same address as “stringa” […]

指针数组 – 外部问题

文件1.c. int a[10]; 文件main.c: extern int *a; int main() { printf(“%d\n”, a[0]); return 0; } 给我一个段错误! 出了什么问题?

Sprintf分段错误

numCheck是介于1-1000之间的数字。 只有当我在charcheck中收集sprintf的结果时,此代码才会给我一个段错误。 如果我只是在不使用结果的情况下使用sprintf,我就不会出现seg错误。 这里发生了什么事? char * numString; int charcheck = sprintf(numString, “%d”, numCheck);

strcpy周围的分段错误?

我知道你会用指关节敲打我但是。 为什么会出现分段错误 char* cmd; strcpy(cmd, argv[0]); 当这不 char *cmd; cmd = “plop”; 我一段时间没有练习,也不记得为什么。 ps:实际上,我知道在strcpy之前会有更好的东西 char *cmd = (char*) malloc(strlen(argv[0])); 但我只是想知道为什么这个分段错误。 谢谢 !