01/10/2018, 15:25

Gặp lỗi "Access violation reading location" khi dùng realloc()

tôi có s là mảng kí tự, muốn có được 1 mảng chuỗi của các trường của s mà được phân cách bởi dấu “,”. a là mảng của các chuỗi kí tự nên nó là con trỏ bậc 2. Để tách các trường ra tôi dùng wcstok. và dùng pc là con trỏ nhận địa chỉ trả về của wcstok.
trong lần lặp đầu tiên. tôi tách ra chuỗi “I am a college student”, b cấp phát bình thường với và tôi in ra được a[n-1]. tương tự với lần tách thứ 2 “I live in Canada”. Nhưng khi ở lần lặp thứ 3, ở hàng cấp phát báo lỗi “Access violation reading location”.

#include <stdio.h>
#include <wchar.h>
#include <cstdlib>
#include <string.h>
#include <io.h>
#include <fcntl.h>

int main()
{
int n = 0;
wchar_t s[] = L"I am a college student, I live in Canada, I love ice cream";
wchar_t** a = NULL;
wchar_t** temp2 = NULL;

wchar_t* pc = wcstok(s, L",");

while (pc)
{
	n++;
	temp2 = (wchar_t**)realloc(a, n * sizeof(wchar_t*));   <--- báo lỗi tại lần lặp thứ 3

	if (!temp2)
	{
		printf("Failed!
");
		for (int k = 0; k < n; k++)
		{
			free(a[k]);
			a[k] = NULL;
		}
		free(*a);
		*a = NULL;
	}

	a = temp2;

	a[n - 1] = (wchar_t*)malloc(((wcslen(pc)+1) * sizeof(wchar_t)));
	wcsncpy(a[n-1], pc, 1000);
	a[n - 1][wcslen(pc)] = '';

	printf("%d
", wcslen(a[n - 1]));
	wprintf(L"%s
", a[n - 1]);

	pc = wcstok(NULL, L",");
}

free(a);

return 0;

}

Bài liên quan
0