Malloc故障
这段代码导致分段错误:Malloc故障,c,C,这段代码导致分段错误: #include <stdio.h> #include <stdlib.h> #include <string.h> #define SLIDINGWINDOW 5 #define SEGMENTSIZE 100 int main() { char** send_buffer = (char**) malloc (SLIDINGWINDOW); int i; for (i = 0; i<SLIDINGWI
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SLIDINGWINDOW 5
#define SEGMENTSIZE 100
int main() {
char** send_buffer = (char**) malloc (SLIDINGWINDOW);
int i;
for (i = 0; i<SLIDINGWINDOW; ++i) {
send_buffer[i] = (char*) malloc (SEGMENTSIZE);
}
for (i = 0; i<SLIDINGWINDOW; ++i) {
strcpy(send_buffer[i], "Hello, world");
printf("%s\n", send_buffer[i]);
fflush(NULL);
}
}
奇怪的是,如果你把第二个循环的内容放到第一个循环中,它就工作了
有人知道为什么会这样吗?
非常感谢 传递给malloc的大小不正确。你可能是说:
char** send_buffer = malloc (SLIDINGWINDOW * sizeof(send_buffer[0]));
及
这是因为malloc的参数是您要求的字节数,因此需要将所需的长度乘以元素的大小
此外,还应检查malloc返回的值是否为NULL
注意,我已经从C中的malloc调用中删除了强制转换,强制转换不是必需的,并且
进一步的改进是使用以下方法确保您不会在段结束后写入字符:
strncpy(send_buffer[i], "Hello, world", SEGMENTSIZE);
请注意,如果源字符串大于SEGMENTSIZE,则目标字符串不会以null结尾。您可以通过以下方法解决此问题:
send_buffer[i][SEGMENTSIZE - 1] = '\0';
在strncpy之后。这将只为滑动窗口字节生成足够的空间: 您需要足够的空间来放置滑动窗口指针:
你的第二个malloc是幸运的;sizeofchar始终为1。更可靠的写入方法是char**send_buffer=malloc SLIDINGWINDOW*sizeof*send_buffer;;更一般地说:某些类型*foo=mallocCOUNT*sizeof*foo;
send_buffer[i][SEGMENTSIZE - 1] = '\0';
malloc (SLIDINGWINDOW)
malloc (SLIDINGWINDOW * sizeof(char*))